【发布时间】:2015-04-06 15:49:54
【问题描述】:
我有一个 UITableViewController,它通过显示(推送)segue 呈现。它的行有 UITextFields。在 iPhone 上,当文本字段获得焦点时,如果该文本字段位于屏幕底部,则键盘会隐藏该文本字段。
这只发生在 iPhone 上,除了“present modalally”或“present as popover”之外的任何segue。对于后一种情况,表格向上滚动文本字段,使其不被键盘覆盖——这是 UITableViewController 的标准行为。
在 iPad 上,它按预期工作(自动滚动表格),无论 segue 类型如何。知道为什么吗?
我创建了一个新项目只是为了测试它,它按预期工作。在它不起作用的初始项目中,UITableViewController 是 SplitViewController 的辅助控制器。
我已经测试过是否使用自动布局,结果相同。
iOS8
谢谢
第一个屏幕截图显示了没有文本字段的表格具有焦点 第二个是在最后一个文本字段获得焦点之后拍摄的。它被键盘覆盖。
PS:我已经尝试过只使用 UITableViewController,而不是最初的 UITableViewController 的子类。我知道在子类中存在问题,例如,如果您覆盖 viewWillAppear 但不调用 super。事实并非如此。
相关苹果文档摘录:
注意:表格视图控制器支持表格视图行的内联编辑;例如,如果行在编辑模式下嵌入了文本字段,它会在显示的虚拟键盘上方滚动正在编辑的行。它还支持 NSFetchedResultsController 类来管理从 Core Data 获取请求返回的结果。
UITableViewController 类通过重写 loadView、viewWillAppear: 和其他继承自 UIViewController 的方法来实现上述行为。在你的 UITableViewController 的子类中,你也可以重写这些方法来获得特殊的行为。如果您确实重写了这些方法,请务必调用该方法的超类实现,通常作为第一个方法调用,以获得默认行为。
【问题讨论】:
-
请更清楚地说明问题所在!是否有时键盘会隐藏选定的 TextField 而有时不会?你在这里模拟了 4 个案例,iPhone 与 iPad 以及模态与显示:在什么情况下组合会发生什么?
-
请截图?你在使用自动布局吗?
-
@UttamSinha - 添加截图,谢谢
-
@luk2302 - 我已经修改了文本,澄清了您提出的问题。谢谢
-
@johnnyMac - 似乎不是展示或呈现形式的问题。刚刚检查了我自己的,当最后一行文本字段获得焦点时,tableview 向上滚动。您需要检查 tableview 框架和内容大小。如果您使用的是自动布局,那么您必须检查布局约束。