iOS:show segue阻止UITableViewController在UITextField获得焦点时自动滚动

时间:2015-04-06 15:49:55

标签: ios iphone

我有一个通过show(push)segue呈现的UITableViewController。它的行有UITextFields。在iPhone上,当文本字段获得焦点时,如果所述文本字段位于屏幕底部,则键盘会隐藏文本字段。

这只发生在iPhone上,除了"以模态方式呈现任何segue"或者"作为popover出现"那些。对于后面这些段,表格会向上滚动文本字段,使其不被键盘覆盖 - 这是UITableViewController的标准行为。

在iPad上,它可以按预期工作(自动滚动表格),无论segue类型如何。知道为什么吗?

我已经创建了一个新项目来测试它,它按预期工作。在它不起作用的初始项目中,UITableViewController是SplitViewController的辅助控制器。

我测试过是否有自动布局,结果相同。

iOS8上

enter image description here

enter image description here

由于

第一个屏幕截图显示没有焦点的文本字段的表格 第二个是在最后一个文本字段获得焦点后拍摄的。它被键盘覆盖。

PS:我刚刚尝试使用UITableViewController,而不是最初的UITableViewController的子类。我知道在子类中有一个问题,例如你覆盖viewWillAppear但不调用super。事实并非如此。

相关Apple文档摘录:

注意:表视图控制器支持对表视图行进行内联编辑;例如,如果行在编辑模式下嵌入了文本字段,则会将正在编辑的行滚动到显示的虚拟键盘上方。它还支持NSFetchedResultsController类,用于管理从Core Data获取请求返回的结果。

UITableViewController类通过重写loadView,viewWillAppear:和从UIViewController继承的其他方法来实现上述行为。在UITableViewController的子类中,您还可以覆盖这些方法以获取特殊行为。如果你覆盖这些方法,请务必调用方法的超类实现,通常作为第一个方法调用,以获得默认行为。

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewAndDataModel/TableViewAndDataModel.html#//apple_ref/doc/uid/TP40007451-CH5-SW7

2 个答案:

答案 0 :(得分:0)

我已经检查过这种行为并在iPhone 6中遇到过这种问题。

在viewDidLoad方法中 -

self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

答案 1 :(得分:0)

我希望我能告诉你为什么下面的代码有效,但我不能;我知道这是一个糟糕的答案。话虽如此,它在我的应用程序中始终如一。

向视图控制器解雇添加一个简单的完成块。在我的代码中,这意味着viewWillAppear被调用两次,一次被解雇,一次被调用(正如我所说,我不知道为什么这样做但是它对我有用)。

dismissViewControllerAnimated(true) { self.viewWillAppear(true) }