我有一个splitView应用程序,它有一个rootViewController和DetailsViewController,当应用程序加载detailsViewController时,会弹出包含UINavigationBar的Modal viewController。
UINavigationBar上有一个搜索栏(通过编程设置)。当焦点被带到搜索栏时,键盘会弹出。
然而,取决于设备(模拟器)的方向,键盘会弹出错误的方向。键盘总是显示得好像ipad处于“正常”方向(即在主键位于的一侧)。
我将在所有方法中返回YES:
- (BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation)interfaceOrientation;
为了了解发生了什么,我向每个类添加了一些调试代码,以便在每次触发interfaceOrientation
事件时记录shouldAutorotate,同时也显示模式viewDidLoad
方法何时启动。我对每个方向进行了测试:调试输出如下所示。
调试表明,无论实际设备方向如何,rootViewController和DetailsViewController接口方向都是肖像。
唯一正确的日志(其中接口定向=设备定向)是每次测试中触发模态shouldAutorotate事件的第一次和最后一次(第三次)。
如果我在应用程序启动后旋转iPad,那么键盘就会出现在正确的方向上。
有谁能解释一下为什么会发生这种情况,以及如何避免呢?
肖像
家庭按钮位置:底部
键盘显示:底部
调试:
APP委托-添加人的
细节-界面画像
根界面画像
根界面画像
细节-界面画像
模态-界面图
模态载荷
模态旋转启动
模态旋转端
模态-界面人像景观
家庭按钮位置:左
键盘出现:左调试:
APP委托-添加人的
细节-界面画像
根界面画像
根界面画像
细节-界面画像
模态-界面景观
模态载荷
模态旋转启动
模态旋转端
模态-界面图
模态-界面景观肖像家庭按钮位置:顶部
出现键盘:顶部调试:
APP委托-添加人的
细节-界面画像
根界面画像
根界面画像
细节-界面画像
模态-界面图
模态载荷
模态旋转启动
模态旋转端
模态-界面图
模态-界面人像景观
家庭按钮位置:右
出现键盘:右调试:
APP委托-添加人的
细节-界面画像
根界面画像
根界面画像
细节-界面画像
模态-界面景观
模态载荷
模态旋转启动
模态旋转端
模态-界面图
模态-界面景观
发布于 2012-09-20 23:02:53
在呈现模态视图控制器之前,您需要让iOS处理旋转事件。
下面是正在发生的事情:
该应用程序在设备的方向上是launched.
动画。
这基本上是一个UIKit种族条件。其中一些细节是猜测,但效果是显而易见的。
幸运的是,这是非常容易修复的。
与其直接创建新视图,不如将其安排在主队列上处理。它将在当前事件被分派之后完成,其中包括旋转事件。
当前:
[self presentModalViewController:newViewController animated:YES];
固定:
dispatch_async(dispatch_get_main_queue(), ^{
[self presentModalViewController:newViewController animated:YES];
});
使用这个新代码,您可以得到以下序列:
该应用程序在设备的方向上是launched.
动画。
发布于 2010-07-09 19:08:15
你有没有把你所支持的方向加入到夹板里?
请参见:
http://developer.apple.com/iphone/library/documentation/General/Conceptual/iPadProgrammingGuide/CoreApplication/CoreApplication.html#//apple_ref/doc/uid/TP40009370-CH6-SW9
https://stackoverflow.com/questions/3214548
复制相似问题