首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在键盘打开时停止GeometryReader更改值

在键盘打开时停止GeometryReader更改值,可以通过监听键盘的打开和关闭事件,并在相应的事件中控制GeometryReader的更新行为。

首先,需要使用SwiftUI提供的NotificationCenter来监听键盘的打开和关闭事件。在视图中添加如下代码:

代码语言:txt
复制
import SwiftUI

struct ContentView: View {
    @State private var keyboardHeight: CGFloat = 0
    
    var body: some View {
        VStack {
            // Your content here
            
        }
        .padding()
        .onAppear {
            NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillShowNotification, object: nil, queue: .main) { notification in
                guard let keyboardFrame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect else { return }
                self.keyboardHeight = keyboardFrame.height
            }
            
            NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillHideNotification, object: nil, queue: .main) { _ in
                self.keyboardHeight = 0
            }
        }
        .onDisappear {
            NotificationCenter.default.removeObserver(self)
        }
    }
}

在上述代码中,通过使用@State属性包装器来创建一个keyboardHeight变量,用于存储键盘的高度。在onAppear中,通过NotificationCenter添加了两个观察者,分别监听键盘的打开和关闭事件。当键盘打开时,获取键盘的高度并将其赋值给keyboardHeight变量;当键盘关闭时,将keyboardHeight重置为0。在onDisappear中,移除了观察者,以避免内存泄漏。

接下来,在需要停止GeometryReader更改值的地方,可以使用keyboardHeight变量来控制GeometryReader的更新行为。例如,可以通过修改GeometryReader的frame来实现:

代码语言:txt
复制
GeometryReader { geometry in
    // Your content here
}
.frame(height: geometry.size.height - keyboardHeight)

在上述代码中,通过将GeometryReader的高度减去keyboardHeight来实现在键盘打开时停止GeometryReader更改值的效果。

这样,当键盘打开时,GeometryReader的高度将不再随键盘的打开而改变,从而达到停止GeometryReader更改值的目的。

需要注意的是,上述代码仅为示例,实际使用时需要根据具体情况进行适当调整。同时,为了保证代码的可读性和可维护性,建议将键盘相关的逻辑封装成可复用的组件或扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

掌握 SwiftUI 的 Safe Area

本文将探讨如何在 SwiftUI 中获取 SafeAreaInsets、将视图绘制到安全区域之外、修改视图的安全区域等内容。...使用 GeometryReader 获取 GeometryProxy 提供了 safeAreaInsets 属性,开发者可以通过 GeometryReader 获取视图的 safeAreaInsets。...•all(默认)上述两种安全区域划分的合集 iOS 13 并没有提供键盘自动避让功能,开发者需要编写一些额外的代码来解决软键盘不恰当遮盖视图(如 TextField )的问题。...从 iOS 14 开始,SwiftUI 计算视图的安全区域时,将软键盘在屏幕上的覆盖区域(iPadOS 下,将软键盘缩小后键盘的覆盖区域将被忽略)也一并进行考虑。...首先,背景并没有充满全部屏幕,其次在软键盘弹出时,我们并不希望背景因为安全区域的变化而发生改变。

7.7K31

基于HarmonyOS 5.0 (Next)的一种面向多设备跨平台的高性能自适应布局能力研究和实现

这对于实现更加复杂和自适应的布局非常有帮助,特别是在设计如瀑布流这样需要动态调整子项位置的组件时。 GeometryReader 示例 首先,我们需要明确 GeometryReader 的使用场景。...在瀑布流组件中,我们可能不需要直接在 GeometryReader 内部实现瀑布流逻辑,因为瀑布流的核心是动态计算和分配子项位置,这通常在组件初始化或数据更新时完成。...下面是一个简化的示例,展示了如何在 ArkUI 中使用 GeometryReader 来获取父容器的尺寸,并据此调整瀑布流组件的布局: @Component struct WaterfallLayoutWithGeometryReader...数据排序:在某些情况下,你可能需要按照特定的顺序(如时间、热度等)来排序数据。这可以在数据获取之后立即进行,或者在组件的某个特定时刻(如刷新时)进行。...你可以使用ArkUI提供的列表组件(如List),这些组件内部实现了项复用机制。当列表滚动时,只有进入或离开视窗的项会被重新渲染。

20630
  • 如何在 SwiftUI 中创建条形图

    前言 条形图以矩形条的形式呈现数据的类别,其宽度和高度与它们表示的值成比例。本文将展示如何创建一个垂直条形图,其中矩形的高度将代表每个类别的值。...系列文章 如何在 SwiftUI 中创建条形图 SwiftUI 中的水平条形图 在 iOS 16 中用 SwiftUI Charts 创建一个折线图 在 iOS16 中用 SwiftUI 图表定制一个线图...同样的图表可以放到任何没有其他视图的新试图上,当设备旋转时,图标将会充满空间并调整大小。...条形图上的值使用叠加视图修改移到了条形图的顶部。这个值是偏移的,所以文本不会离条形图的顶部太近。数据名称的字体大小和字重也可以被设置。...图标被设置为固定大小,视图被嵌入到 ScrollView 中,以便在设备旋转时滚动。

    5.2K10

    在 Windows 11 上关闭弹出窗口最正确方法

    在您工作或尝试专注于某段内容时,弹出窗口和中断可能会很烦人。 虽然移动设备只有一个 DND 切换开关,但Windows呢?您可以在 Windows 11 上停止弹出窗口吗?...这种新的请勿打扰允许您自定义如何在您的 PC 上抑制通知。...计算机制造商如戴尔或惠普可以通过其应用程序访问通知,以用于展示广告和其他可能不需要的弹出窗口。然而,这种烦恼有一个快速解决方法: 按Windows + i打开设置应用程序。...按下Windows + R键盘,输入以下内容,然后按下Enter键盘。 gpedit.msc 现在使用左侧边栏导航到以下路径。...按下Windows + R键盘,输入以下内容,然后按下Enter键盘。 regedit 现在使用左侧边栏导航到以下路径。您也可以在屏幕顶部的地址栏中复制粘贴相同的内容。

    1.2K10

    iOS 9人机界面指南(四):UI元素(下)- 腾讯ISUX

    日期时间选择器: 最多可以展示4个独立的滑轮,每一个滑轮表示一个不同的值,比如月份或小时等 在每个滑轮的中央使用深色字体来表示当前选中的值 日期时间选择器的大小与iPhone键盘的大小相同,并且不可更改...当告知用户有多少打开的视图的需求比帮助用户选择特定的视图更重要时,使用页面控件。...步进器: 是一个两段控件,其中一段默认显示减号,另一端默认显示加号 支持自定义图片 不展示用户更改的值 当用户想要对数值进行小幅度调整时,可以使用步进器。...文本框 高度固定,包含圆角 当用户点击它时,自动唤起输入键盘 可以包含系统提供的按钮,如书签按钮(Bookmarks) 可以展示多种文字样式(了解更多请参考 UITextView) 使用文本框来获取用户输入的少量信息...当文本框里没有任何其它提示文字时,会展示占位符文本(placeholder text),如名字、地址等。 根据输入内容的类型来指定不同的键盘类型。

    13.2K30

    在 SwiftUI 中实现视图居中的若干种方法

    可以通过 ignoresSafeAreaEdges 参数设置是否忽略安全区域,默认值为 .all ( 忽略任何的安全区域 )。...ZStackZStack { // 使用对齐指南的默认值,相当于 ZStack(alignment:.center) Color.green hello}.frame(width: 300,...请阅读 SwiftUI 布局 —— 对齐[5] ,了解更多有关 ZStack、overlay、background 的对齐机制Geometry虽然有些大材小用,但当我们需要获取更多有关视图的信息时,GeometryReader...的建议尺寸由于 GeometryReader 拥有与 Color、Rectangle 类似的特征,会将给定的建议尺寸作为需求尺寸( 表现为占用全部可用空间 )GeometryReader 给 Text...我为本文这种通过多种方法来解决一个问题的方式添加了【小题大作】标签,目前使用该便签的文章还有:在 Core Data 中查询和使用 count 的若干方法[6]、在 SwiftUI 视图中打开 URL

    6.8K40

    SwiftUI中的水平条形图

    本文展示了如何在垂直条形图的基础上创建一个水平柱状图。 水平条形图不是简单的垂直条形图的旋转。在Numbers 等应用程序中,水平条形图被定义为独立的图表类型,而不是垂直条形图。...矩形条的宽度与数据的值成正比。...struct YaxisHView: View { var data: [DataItem] var body: some View { GeometryReader...} } } } y轴显示水平条形图上的数据类别 更新X轴 同样,创建了一个XaxisHView视图来显示水平条形图的X轴,并使用与垂直条形图的Y轴类似的代码来布置刻度线和刻度值。...在创建垂直条形图时学到的技术可以重复使用,但最好将水平条形图视为与垂直条形图不同的图表。当我们深入到轴等组件时,可以看到两个图表中的轴线都是一样的,但是它们的标签和定位在x和y之间是换位的。

    4.8K20

    使用 PowerToys Keyboard Manager 重新定义 Windows 1011 键盘上的键

    首次打开时,不会显示预定义映射。 选择添加键重映射可添加新的重映射。 请注意,各种键盘键实际均会发送快捷方式。 新的重映射行出现后,在“选择”列中选择要更改其输出的输入键。...重映射快捷方式 若要重新映射快捷键组合(如 Ctrl+C),请选择重新映射快捷方式以打开“重映射快捷方式设置”窗口。 首次打开时,不会显示预定义映射。 选择添加快捷方式重映射可添加新的重映射。...新的重映射行出现时,在“选择”列中选择要更改其输出的输入键。 在“发送内容”列中选择要分配的新快捷方式值。 例如,快捷方式 Ctrl+C 会复制所选文本。...使用下拉菜单可以通过键名称进行搜索,其他下拉值会随着进度而显示。 但是,在下拉菜单打开期间,无法使用键入键功能。 孤立键 孤立键意味着已将它映射到另一个键,并且不再将任何内容映射到它。...现在,如果在英语(美国)键盘上将 A 重映射到 B,然后将语言设置更改为法语,则在法语键盘上键入 A(美国英语物理键盘上的 Q)会生成 B,这与 Windows 处理多语言输入的方式一致。

    58910

    SwiftUI 之 HStack 和 VStack 的切换

    GeometryReader GeometryReader 能实现吗?...一种方式是用 GeometryReader 测量当前可用空间,并根据宽度是否大于其高度,可以选择使用 HStack 或 VStack 来渲染内容。...相反,让我们像 SwiftUI 一样,对这些属性参数化,同时设定框架所使用的默认值 — 就像这样: struct DynamicStack: View { var...通过在 DynamicStack 中声明 @Environment - 标记属性(带有 horizontalSizeClass 关键路径),将会使我们在视图内容中切换到当前 sizeClass 的值:...这样做会令动画更流畅,例如在切换设备方向时,我们也有可能在执行此类更改时获得小幅的性能提升(因为 SwiftUI 总是在其视图层次结构为静态时尽可能表现最佳) 选择合适的视图 但我们还没有结束,因为

    2.9K10

    C1能力认证训练题解析 _ 第四部分 _ Web进阶「建议收藏」

    如果属性已经存在,则更新该值;否则,使用指定的名称和值添加一个新的属性 通过属性名更改属性 对元素属性重新赋值可更改对应属性值 2....常用键盘属性事件 名称 描述 keyCode keyCode属性返回keypress事件触发的键的值的字符代码,或者keydown或keyup事件的键盘代码。...字符代码 – 表示ASCII字符的数字 键盘代码 – 表示键盘上真实键的数字 charCode 返回keypress事件触发时按下的字符键的字符Unicode值,用于keydown或keyup时总是返回...七、窗口事件 常用鼠标事件: 名称 描述 load 当整个页面及所有依赖资源(如样式表和图片)都已完成加载时,将触发load事件 beforeunload window、document 和它们的资源即将卸载时触发..._self –- url替换当前页面 _top –- url替换任何可加载的框架集 name — 窗口名称 features: 设置新打开窗口的功能样式(如:width=500)

    2K20

    Linux常用命令12 - vi

    了解 vim 的基本知识将帮助您在遇到您最喜欢的编辑器不可用的情况时。 用法很多,在这里就简单说下常用的操作,如何在 vim / vi 中保存文件并退出编辑器。...vim 模式 启动 vim 编辑器时,处于正常模式。 在这种模式下,您可以使用 vim 命令并在文件中导航。 为了能够输入文本,您需要进入插入模式按下 i 键。...打开文件 使用 vim 打开文件,后面跟着要编辑或创建的文件的名称: vim file.text 保存文件 在 vim 中保存文件的命令是:w。...按键盘最左上角 Esc :w 按下 Enter 还有一个 update 命令:up,它只在文件中有未保存的更改时才将缓冲区写入文件。...退出不保存文件 若要退出编辑器,不保存更改,请按 Esc 切换到正常模式,键入:q! 并按回车键。感叹号是强制的意思。 按键盘最左上角 Esc :q! 按下 Enter ?

    2K30

    C1 能力认证——Web进阶

    直接使用属性名称获取 适用于部分属性(如:title,value,href) 获取id名为container的div元素,请补全横线处代码 document....如果属性已经存在,则更新该值;否则,使用指定的名称和值添加一个新的属性 通过属性名更改属性 对元素属性重新赋值可更改对应属性值 DOM添加 名称 描述 createElement(tagName) 创建一个由标签名称...使用键盘事件属性可以精确的控制键盘操作,如:回车触发,方向键触发 名称 描述 keyCode keyCode属性返回keypress事件触发的键的值的字符代码,或者keydown或keyup事件的键盘代码...字符代码 - 表示ASCII字符的数字 键盘代码 - 表示键盘上真实键的数字 charCode 返回keypress事件触发时按下的字符键的字符Unicode值,用于keydown或keyup时总是返回...定时器停止,最终显示fruit数组中索引为2的水果名称

    3.2K30

    Win10 快捷键大全(史上最全)「建议收藏」

    Ctrl + Shift 加某个箭头键 选择文本块 Ctrl + Esc 打开“开始”屏幕 Ctrl + Shift + Esc 打开任务管理器 Ctrl + Shift 在提供了多个键盘布局时切换键盘布局...Delete 无需先将选定项移动到“回收站”,直接将其删除 向右键 打开右侧的下一个菜单,或者打开子菜单 向左键 打开左侧的下一个菜单,或者关闭子菜单 Esc 停止或退出当前任务 Windows 徽标键键盘快捷方式...出现 Windows 提示时,将焦点移到该提示。 再次按这些键盘快捷方式,将焦点移到定位 Windows 提示的屏幕上的元素。...打开设置 Backspace 回退到“设置”主页 在带有搜索框的任何页面上键入 搜索设置 Windows 10 应用中的键盘快捷方式 在许多应用(如照片、Groove 和地图)中,当你将鼠标指针悬停在某个按钮上时...游戏栏键盘快捷方式 按此键 执行此操作 Windows 徽标键 + G 打开游戏栏(当游戏处于打开状态时) Windows 徽标键 + Alt + G 录制最后 30 秒 Windows 徽标键 + Alt

    17.6K31

    Ubuntu使用教程-更改Samba工作组和计算机名

    这个问题的答案很简单,但当你接触新事物时,你需要时间来完全理解它。 这是我们前几天收到的问题; 如何更改Samba的工作组名和Ubuntu的计算机名称?...当涉及到在Ubuntu中更改计算机名时,我们曾写过一个简单的帖子,可以点击这里找到。按照这个怎样修改你的计算机名字的简易指南来实现目的。...在键盘上按Ctrl – Alt – T打开终端来更改Ubuntu中的Samba工作组。当终端打开时,运行以下命令来编辑的Samba的配置文件。...sudo gedit /etc/samba/smb.conf 打开这个文件后,请确保在[global]段中workgroup起始的那行的单词或值是你想要的工作组。...以上就是如何在Ubuntu中更改你的计算机名以及工作组的方法。记住,如果你这样做是为了共享或访问Windows文件和文件夹,还必须​​安装Samba。

    95810

    掌握 ViewThatFits

    如果在所有设置的受限轴上,理想尺寸都小于等于建议尺寸,那么选择该子视图,并停止对后续子视图进行判断。 如果所有的子视图都不满足条件,则选择闭包中的最后一个子视图。...它只在检查阶段使用子视图的理想尺寸进行判断,在最终呈现阶段,它将向子视图提交有值的建议尺寸,并使用子视图的需求尺寸作为自身的需求尺寸。...就布局而言,"理想尺寸"指的是当父视图以未指定的模式提供建议尺寸时,视图返回的需求尺寸。...,并在最终布局时(placeSubviews)将其作为建议尺寸传递给子视图。...通过对理想尺寸和布局适应性的详细分析,我们展示了 ViewThatFits 如何在多样化的应用场景中发挥作用。 尽管 ViewThatFits 在处理多种视图和布局挑战方面非常有用,但它并不是万能的。

    23510

    提高效率 |ArcGIS Pro 中所有快捷键一网打尽

    Ctrl+H 将 z 值移动到指针。 将选定折点的 z 值移动到指针的高程。保留 x 值和 y 值。这仅在启用立体模式时可用。 Ctrl+G 移动指针 z 值。 将指针 z 值移动到所选折点的高程。...使用随沿要素创建文本时,可以使用此快捷键。 O 使用“随沿要素”选项。 打开编辑器设置对话框。使用随沿要素创建文本时,可以使用此快捷键。 Ctrl + 拖动 更改“随沿要素”距离。...将更改应用于当前部分,并使构造工具处于活动状态,以为要素创建另一部分。 空格键 打开和关闭捕捉。 按住空格键,会暂时关闭捕捉功能。创建手绘折线或面要素时,暂时打开捕捉功能。...如果追踪所选要素已打开,则可以追踪所选要素及未选要素。 通过流创建 用于流构造工具的键盘快捷键 键盘快捷键 操作 注释 O 查看选项。 打开选项对话框。 F8 启动或停止流。...开始或停止流传输。 创建圆 用于圆形构造工具的键盘快捷键 键盘快捷键 操作 注释 F6 指定绝对 X,Y,Z 。 打开绝对 X,Y,Z对话框。 R 指定半径。 将打开半径对话框。

    1.3K20

    学习中遇到的小技巧 二 (陆续更新……)

    今天打开数据库表添加记录时,找了半天没找到,原来对表中记录的许多操作都在窗口最下面的状态栏上方,如图: ?...如果在浏览器、Onenote、聊天界面等输入窗口可以切换输入法,而在word中无论是用Alt+Shift还是CTRL+SHIFT都无法切换时,试试下面的方法:控制面板—时钟、语言和区域—更改键盘或其他输入法...—更改键盘—高级键设置,在“输入语言的热键”下选中“在输入语言之间”,点击“更改按键顺序”,左边选择“左Alt+Shift”,右边选择“不分配”,确定,然后再进入“中文(简体)输入法 - 输入法/非输入法切换...”,取消“启用按键顺序”前的勾,一直点击确定,然后重新进入更改键盘—高级键设置,进入“在输入语言之间”,右边选择“Ctrl+Shift”或者“Alt+Shift”(按自己的习惯),确定。...接着就可以使用了,开始录制点击开始记录即可记录完成后点击停止记录即可自动弹出保存的对话框然后进行保存即可。保存的格式为zip压缩,文件格式为mht文件。系统自带的浏览器均可打开。

    1.3K40
    领券