首页
学习
活动
专区
工具
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.5K31

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

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

13.2K30

何在 SwiftUI 中创建条形图

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

5.1K10

在 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.6K40

SwiftUI中的水平条形图

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

4.8K20

SwiftUI 之 HStack 和 VStack 的切换

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

2.8K10

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

掌握 ViewThatFits

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

17410

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

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

92310

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

16.1K30

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

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

1.3K40

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

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

82320

html5 最小化,当前界面最小化快捷键 窗口最小化和全屏化的快捷键是什么?

怎样用快捷键显示最小化的窗口 在键盘上同时按下Win+D 键,可以最小化所有窗口。 在键盘上再次同时按下Win+D 键,可以还原步骤1最小化的所有窗口。...具体操作步骤如下: 首先在电脑上点击打开一个对话窗口,在此窗口可看到其处于正常化状态,接着在此页面中按键盘上的“windows+M”组合键。 请问窗口最大化最小化的快捷键是什么?...比如想一下子最小化多个 Finder 窗口,就可以用该快捷键; 使用快捷键 Command+ 如何在使用word需要最小化时就用快捷键最小化 但是不要直接所有的窗口Ctrl+S保存Ctrl+W关闭程序...更改QQ系统设置:打开QQ的设置→基本设置→主面板→选择关闭面板“隐藏到任务栏通知区域,不退出程序”。...发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

1.5K20

win10电脑休眠后无法唤醒的解决办法

但有些时候也会出现一些问题,休眠后无法唤醒,无法移动鼠标,敲击键盘都无效,最后只能长按电源键来强制关机!!!   当你也遇到无法唤醒的问题,可以尝试以下方法来解决。...这里是指主板ACPI即高级配置与电源接口的一个级别,一般有五种控制方式:   S0:正常工作,就是正常的运行状态;   S1:处理器(CPU)停止工作,唤醒时间:0秒,该模式下屏幕关闭、显示信号关闭,硬盘停转进入待命状态...S3:Suspend to RAM,除了内存外的设备都停止工作,唤醒时间:0.5秒;   S4:Suspend to Disk,内存中的信息写入硬盘,所有部件停止,唤醒时间:30秒;   S5:Shutdown...之后点击【更改计划设置】--> 【更改高级电源设置】   打开【电源选项】里面的【睡眠】选项打开只有两行选项可以选择。 ?   ...网上有人说使用快捷键【Win + R】 打开运行窗口输入 cmd 的方式,打开的不是管理员命令提示符,执行该命令出行错误,如下图: ?

6.8K3431
领券