iOS7 FormSheet模态视图在动画后转移到KB焦点之后

拥有传统的UISplitViewController iPad应用程序,它使用presentViewController从“右侧”VC窗格显示模态视图:animated:completion:将modalPresentationStyle设置为UIModalPresentationFormSheet.在viewDidAppear中的模态视图的VC中,我们在UITextField上调用becomeFirstResponder.在iOS6中,这导致了一个居中的模态视图,从底部向上滑动,然后聚焦KB.然而,自iOS7以来,在视图从底部向上滑动之后,它会向右滑动(估计)200点.奇怪的是,如果您解除键盘,只要您做到这一点,视图就会像iOS6一样滑回到它的居中位置.从那时起,当模态视图出现时,KB焦点会导致它保持居中,并且只能向上滑动一点,这是非全屏幕模态视图的正常iOS行为.这就像是一旦你把KB自己从之后解雇了,我试过发现:

>如果为thisViewController调用设置动画为NO,它的工作原理就像iOS6.
>如果你根本不叫isFirstResponder,它的作用就像iOS6.
>如果您调用performSelector:xxxxafterDelay:0,将getsFirstResponder作为选择器,而不是直接调用becomeFirstResponder,它也可以像iOS6一样工作.

从上面的选项3是我的前进的解决方法,但我的问题是:这是一个iOS7的错误,还是我们做错了的事情,显然是在6,但不是在iOS7?

只发生在iOS7之后.只有在模拟器上重新创建了一次,而100%的测试设备上的时间(iPad mini).从搜索中我已经完成了我目前最好的猜测(假设我们的代码不是责怪iOS7),键盘的动画和从iOS界面底部滑出的视图之间是一个种族条件类型的错误这导致视图向右移动而不是向上移动,就像通常情况下,当非全屏幕视图以模态显示和KB弹出时.阅读this similar SO question后我得到了这个理论.

解决方法

有这个问题.这绝对是iOS7.X中的一个bug. (你应该打开苹果的错误报告!).苹果在布局计算中出现了错误,并改变了模式呈现的视图.

我们用了

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

克服这个问题,这与你的#3相似.这会拖延键盘的外观,直到视图的布局,克服了这个问题.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...