iOS7 FormSheet模式视图在动画后焦点转移到右侧

时间:2014-05-01 13:57:54

标签: ios ipad ios7

拥有一个遗留UISplitViewController iPad应用,可显示来自"右侧"的模态视图。 VC窗格使用presentViewController:animated:completion:modalPresentationStyle设置为UIModalPresentationFormSheet。在模态视图VC的viewDidAppear中,我们在UITextField上调用了becomeFirstResponder。在iOS6中,这会导致中心模态视图从底部向上滑动,然后聚焦KB。但是,从iOS7开始,出现的情况是视图从底部向上滑动后,向右滑动约(估计)200点。奇怪的是,如果您关闭键盘,那么视图会一直滑回到它的中心位置,就像它在iOS6上一样。从那时起,当模态视图启动时,KB焦点会使其保持居中并且仅向上滑动一点,这对于非全屏模式视图来说是正常的iOS行为。这就像你曾经解雇KB一样"纠正"从那以后。我已经进行了实验并发现:

  1. 如果您为animated电话设置presentViewController为NO,则其工作方式与iOS6类似。
  2. 如果你根本不打电话给becomeFirstResponder,它就像iOS6一样。
  3. 如果您致电performSelector:xxxxafterDelay:0,将becomeFirstResponder作为选择器而不是直接调用becomeFirstResponder,则它也会像iOS6一样工作。
  4. 上面的选项3目前是我的前瞻性解决方法,但我的问题是:这是一个iOS7错误,还是我们做错的事情显然在6中是好的但在iOS7中没有?

    仅在iOS7之后发生。仅在模拟器上重新创建一次,但在测试设备(iPad mini)上只有100%的时间。从搜索结果中我完成了当前最好的猜测(假设我们的代码不能归咎于iOS7之后),键盘的动画与从中滑动的视图之间存在竞争条件类型错误iOS UI图层中的底部导致视图向右移动而不是向上移动,就像通常在模式显示非全屏视图并弹出KB时一样。我在阅读this similar SO question之后得到了这个理论。

1 个答案:

答案 0 :(得分:14)

有这个问题。这绝对是iOS7.X中的一个错误。 (您应该向Apple打开错误报告!)。发生的事情是Apple在布局计算方面存在缺陷并改变了模态呈现的视图。

我们使用了

dispatch_async(dispatch_get_main_queue(), ^{ [view becomeFirstResponder]; }); 

克服这个问题,类似于你的#3。这会延迟键盘外观,直到视图布局之后,克服问题。