我有一个通过show(push)segue呈现的UITableViewController。它的行有UITextFields。在iPhone上,当文本字段获得焦点时,如果所述文本字段位于屏幕底部,则键盘会隐藏文本字段。
这只发生在iPhone上,除了"以模态方式呈现任何segue"或者"作为popover出现"那些。对于后面这些段,表格会向上滚动文本字段,使其不被键盘覆盖 - 这是UITableViewController的标准行为。
在iPad上,它可以按预期工作(自动滚动表格),无论segue类型如何。知道为什么吗?
我已经创建了一个新项目来测试它,它按预期工作。在它不起作用的初始项目中,UITableViewController是SplitViewController的辅助控制器。
我测试过是否有自动布局,结果相同。
iOS8上
由于
第一个屏幕截图显示没有焦点的文本字段的表格 第二个是在最后一个文本字段获得焦点后拍摄的。它被键盘覆盖。
PS:我刚刚尝试使用UITableViewController,而不是最初的UITableViewController的子类。我知道在子类中有一个问题,例如你覆盖viewWillAppear但不调用super。事实并非如此。
相关Apple文档摘录:
注意:表视图控制器支持对表视图行进行内联编辑;例如,如果行在编辑模式下嵌入了文本字段,则会将正在编辑的行滚动到显示的虚拟键盘上方。它还支持NSFetchedResultsController类,用于管理从Core Data获取请求返回的结果。
UITableViewController类通过重写loadView,viewWillAppear:和从UIViewController继承的其他方法来实现上述行为。在UITableViewController的子类中,您还可以覆盖这些方法以获取特殊行为。如果你覆盖这些方法,请务必调用方法的超类实现,通常作为第一个方法调用,以获得默认行为。
答案 0 :(得分:0)
我已经检查过这种行为并在iPhone 6中遇到过这种问题。
在viewDidLoad方法中 -
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
答案 1 :(得分:0)
我希望我能告诉你为什么下面的代码有效,但我不能;我知道这是一个糟糕的答案。话虽如此,它在我的应用程序中始终如一。
向视图控制器解雇添加一个简单的完成块。在我的代码中,这意味着viewWillAppear被调用两次,一次被解雇,一次被调用(正如我所说,我不知道为什么这样做但是它对我有用)。
dismissViewControllerAnimated(true) { self.viewWillAppear(true) }