【发布时间】:2015-04-15 15:10:24
【问题描述】:
UITableViewController 自动管理文本字段编辑:滚动到可编辑内容,更改插图以在屏幕上同时显示文本字段和键盘,而不会出现键盘重叠。这是一个非常酷的功能,因为我不需要编写大量代码来计算新插图、滚动到内容、检查 deviceOrientation 是否更改或键盘是否隐藏等等。
但是当我们使用 SplitViewController 时,该功能失败,在我们添加到 root 之后,控制器自动管理文本字段仅适用于面向 Pad 的屏幕。我认为这是Apple的错误,但也许这是我的错误,我做错了什么?我检查了 SplitViewController -> Navigation Controller -> UITableViewController 层次结构在 Apple 的 HID 中是否正确。
我已经为这个问题编写了一个简单的应用程序,所以如果你愿意,你可以看到那个错误,我该如何修复它?
链接到带有该错误的简单、新鲜的 XCode 项目:https://www.dropbox.com/s/o315awgonzeskeo/TableEditing.zip?dl=0
半解决方案:如果设备是 iPhone,则删除 SplitViewController。在 iPad 上一切正常,但在 iPhone 上却不行,所以我们可以试试:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootController = storyboard.instantiateViewControllerWithIdentifier("navigation") as! UINavigationController
if UIDevice.currentDevice().userInterfaceIdiom != .Pad {
// setting non-split rootView if device is iPhone
self.window!.rootViewController = rootController
}
}
但是有一个问题——我们在 iPhone 6 Plus 上失去了 SplitViewController(我检查过,在 iPhone 6 Plus 上,纵向键盘仍然重叠,横向键盘一切正常)。所以这不是解决方案。
【问题讨论】:
-
奇怪的行为。在 iOS9 中,苹果似乎修复了这个 bug,因此需要对旧版本进行另一种特殊处理。
标签: ios uitableview swift uitextfield uisplitviewcontroller