我有一个管理UITextView的控制器。通常,在支持多个界面方向的应用程序中,我只需覆盖-shouldAutorotateToInterfaceOrientation:
,设置适当的自动调整大小的蒙版,然后继续我的快乐方式。在我喜欢的方式下,如果我开始在肖像模式中编辑这个UITextField,然后将设备旋转到横向,键盘将与横向模式以及视图的其余部分一起很好地制作动画。这就是我要的。
现在,在这个特定的应用程序中,我有一个根视图,只能永远处于纵向模式。这是相机预览视图。我还有一个相机视图的叠加视图,我希望支持所有的界面方向。这是UITextView所在的位置。
因此,作为固定方向根视图的结果,我无法使用内置旋转:我必须手动执行此操作。这不是问题,我可以注册UIDeviceOrientationDidChangeNotification
并手动为叠加视图设置适当的旋转和帧调整动画。
这足以让视图正确定位,但键盘仍然只能以纵向显示。再次,每当我收到设备已轮换的通知时,我都可以使用UIApplication -setStatusBarOrientation:
来解决这个问题。
但这就是问题出现的地方。我希望结合:
足以完全复制自动旋转行为。但它在一个重要方面不足:如果键盘以一个方向显示,然后旋转到另一个方向,键盘将保持在原始位置,就像从未调用-setStatusBarOrientation:
一样。据我所知,影响键盘演示的唯一因素是应用程序的状态栏方向,并且只有一种方法可以设置它。我运气不好吗?是否真的不能像使用自动旋转一样手动操作键盘?
附录
为了避免覆盖旧地,我尝试了以下解决方案黑客:
答案 0 :(得分:1)
我们的一个应用程序就是这样做的(因为我们在使用原始设计时没有大声说“不!”)使用疯狂的“方向堆栈”代码。我记得通过在键盘启动时禁用方向来修复此问题(ickyyyy)。
相反,请考虑通过“反向旋转”相机预览视图来支持旋转,而不是强制VC仅限纵向。如果这看起来有点奇怪,你可以做“讨厌的黑客”版本:在VC的视图下添加摄像机预览视图作为窗口的子视图,并为VC的视图提供透明背景。
答案 1 :(得分:0)
也许迟到了。我偶然发现了同样的问题。试图在iOS 6中修复它。
显然苹果同时没有认识到这个问题,否则他们现在就会修复它:除了状态栏以外,-setStatusBarOrientation:
方法还包括其他界面元素,或者有替代方法设置键盘和其他元素的方向。遗憾的是他们没有
当键盘启动时禁用方向旋转,对我来说无法解决问题,但我找到了另一个简单的解决方案 hack:
return NO
中-(BOOL)shouldAutorotate
在return UIInterfaceOrientationMaskAll
-(NSUInteger)supportedInterfaceOrientations
然后当您收到此类通知时:
[myTextField resignFirstResponder]
)[sharedApplication setStatusBarOrientation:newOrientation animated:NO]
)[myTextField becomeFirstResponder]
)效果是状态栏和键盘在手动旋转动画之前轻轻滑出,并在动画完成后正常滑回。
顺便说一下,我还发现了Corey Floyd写的这篇有趣的文章:http://coreyfloyd.tumblr.com/post/8212203583/2-ways-to-rotate 虽然他的第二种方法:欺骗UIKit,但只会让我更加困惑。