iOS - 隐藏在键盘后面的 UIView 容器
Posted
技术标签:
【中文标题】iOS - 隐藏在键盘后面的 UIView 容器【英文标题】:iOS - UIView container hidden behind keyboard 【发布时间】:2017-04-21 16:23:01 【问题描述】:我正在使用用户填写的表单处理情节提要视图。底部是一个 UIView 页脚,其中包含一个复选框和提交按钮。当用户在文本字段中输入数据时,键盘会显示和隐藏页脚 - 只有在隐藏键盘时,用户才能选中复选框并提交表单。我已经看到了一些从键盘后面移动文本字段的解决方案,但不适用于 UIView。有人对如何做到这一点有任何建议吗?
【问题讨论】:
您可以关闭键盘,也可以按回车键关闭键盘,也可以通过偏移移动视图,或者您可以在键盘顶部显示临时页脚视图。请展示您的尝试!跨度> 处理键盘的最佳方式是通过 IQKeyboardManager 库。在这里试试。 github.com/hackiftekhar/IQKeyboardManager @SivajeeBattina 仅处理文本字段被键盘覆盖的情况。但如果其他视图被键盘覆盖,则不会。 【参考方案1】:标准解决方案在“Moving Content That Is Located Under the Keyboard” in the Text Programming Guide for ios中描述:
调整内容通常涉及临时调整一个或多个视图的大小并定位它们以使文本对象保持可见。使用键盘管理文本对象的最简单方法是将它们嵌入
UIScrollView
对象(或其子类之一,如UITableView
)中。显示键盘时,您所要做的就是重置滚动视图的内容区域并将所需的文本对象滚动到位。因此,为了响应UIKeyboardDidShowNotification
,您的处理程序方法将执行以下操作:获取键盘的大小。 通过键盘高度调整滚动视图的底部内容插图。 将目标文本字段滚动到视图中。
第 2 步使用户可以将滚动视图向上滚动到足以看到其中的所有内容,包括(在您的情况下)使用条款复选框和提交按钮。
但是,有一种方法可以让 UIKit 为您完成所有这些工作:在故事板中将您的表单布置为带有静态单元格的表格视图。我建议你改用这种方式。
当您将表单布局为带有静态单元格的表格视图时,您仍然可以将表单控件(文本字段、按钮等)连接到视图控制器中的插座和操作(现在必须是 @ 的子类987654325@)。 UITableViewController
基类负责在键盘出现和消失时设置表格视图的 contentInset
,并负责滚动表格视图以确保当前文本字段可见。
【讨论】:
谢谢罗伯。表单本身位于 ScrollView 内部,而页脚位于 ScrollView 下方的 UIView 中。将页脚移动到 ScrollView 而不是在它下面有帮助吗?或者我应该只是将表单和页脚放入 TableView 中?这是另一个开发人员构建的东西,并且存在一些限制 - 如果可能的话,我想避免大规模重组。 听起来你应该把页脚移到滚动视图中。【参考方案2】:嘿,我只是想跟进我用来解决问题的方法。页脚容器具有底部布局指南的垂直间距约束。我为约束创建了一个 IBOutlet...
//define IBOutlet
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *footerConstraint;
然后我添加了代码来调整键盘管理事件处理程序的常量值...
//in keyboardWillShow event handler
NSDictionary* info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
self.footerConstraint.constant = kbSize.height;
//in keyboardWillHide event handler
self.footerConstraint.constant = 0.0f;
通过在这些事件处理程序中调整约束的常量值,我可以在键盘显示之前保持默认值,然后在键盘隐藏后重新设置默认值。
【讨论】:
以上是关于iOS - 隐藏在键盘后面的 UIView 容器的主要内容,如果未能解决你的问题,请参考以下文章
iOS开发实战——CollectionView点击事件与键盘隐藏结合案例