拥有一个遗留UISplitViewController
iPad应用,可显示来自"右侧"的模态视图。 VC窗格使用presentViewController:animated:completion:modalPresentationStyle
设置为UIModalPresentationFormSheet
。在模态视图VC的viewDidAppear
中,我们在UITextField
上调用了becomeFirstResponder。在iOS6中,这会导致中心模态视图从底部向上滑动,然后聚焦KB。但是,从iOS7开始,出现的情况是视图从底部向上滑动后,向右滑动约(估计)200点。奇怪的是,如果您关闭键盘,那么视图会一直滑回到它的中心位置,就像它在iOS6上一样。从那时起,当模态视图启动时,KB焦点会使其保持居中并且仅向上滑动一点,这对于非全屏模式视图来说是正常的iOS行为。这就像你曾经解雇KB一样"纠正"从那以后。我已经进行了实验并发现:
animated
电话设置presentViewController
为NO,则其工作方式与iOS6类似。becomeFirstResponder
,它就像iOS6一样。performSelector:xxxxafterDelay:0
,将becomeFirstResponder
作为选择器而不是直接调用becomeFirstResponder
,则它也会像iOS6一样工作。上面的选项3目前是我的前瞻性解决方法,但我的问题是:这是一个iOS7错误,还是我们做错的事情显然在6中是好的但在iOS7中没有?
仅在iOS7之后发生。仅在模拟器上重新创建一次,但在测试设备(iPad mini)上只有100%的时间。从搜索结果中我完成了当前最好的猜测(假设我们的代码不能归咎于iOS7之后),键盘的动画与从中滑动的视图之间存在竞争条件类型错误iOS UI图层中的底部导致视图向右移动而不是向上移动,就像通常在模式显示非全屏视图并弹出KB时一样。我在阅读this similar SO question之后得到了这个理论。
答案 0 :(得分:14)
有这个问题。这绝对是iOS7.X中的一个错误。 (您应该向Apple打开错误报告!)。发生的事情是Apple在布局计算方面存在缺陷并改变了模态呈现的视图。
我们使用了
dispatch_async(dispatch_get_main_queue(), ^{ [view becomeFirstResponder]; });
克服这个问题,类似于你的#3。这会延迟键盘外观,直到视图布局之后,克服问题。