
当应用程序加载detailsVIEwControllerd出一个包含UINavigationbar的Modal vIEwController.
UINavigationbar上有一个搜索栏(以编程方式设置).当焦点进入搜索栏时,键盘会d出.
但是,根据设备(模拟器)的方向,键盘会以错误的方向d出.键盘始终显示为ipad处于“正常”方向(即主键处于侧面)
我在所有的shouldautoRotate方法中返回YES:
- (BOol)shouldautorotatetoInterfaceOrIEntation:(UIInterfaceOrIEntation)interfaceOrIEntation;
为了尝试找出发生了什么,我每次都为每个类添加一些调试代码,以便在每次触发shouldautorotate事件时记录interfaceOrIEntation,同时还显示模式vIEwDIDLoad方法何时触发.我为每个方向做了一个测试:调试输出如下所示.
调试显示,无论实际的设备方向如何,rootVIEwController和DetailsVIEwController接口方向始终为Portrait.
唯一正确的日志(其中接口方向=设备方向)是每次测试中触发模态shouldautorotate事件的第一个和最后一个(第三个)时间.
如果我在应用程序启动后旋转iPad,则键盘将以正确的方向显示.
任何人都可以阐明为什么会发生这种情况以及如何避免它?
解决方法 在呈现模态视图控制器之前,您需要让iOS处理旋转事件.[PORTRAIT]
Home button position: bottom
Keyboard Appears: bottomDEBUG:
APP DELEGATE- ADD SPliTVIEWCONTRolLER
DETAIL-Interface Portrait
ROOT-Interface Portrait
ROOT-Interface Portrait
DETAIL-Interface Portrait
MODAL-Interface Portrait
MODAL DID LOAD
MODAL-ROTATE START
MODAL-ROTATE END
MODAL-Interface Portrait[LANDSCAPE]
Home button position: left
Keyboard Appears: leftDEBUG:
APP DELEGATE- ADD SPliTVIEWCONTRolLER
DETAIL-Interface Portrait
ROOT-Interface Portrait
ROOT-Interface Portrait
DETAIL-Interface Portrait
MODAL-Interface LANDSCAPE
MODAL DID LOAD
MODAL-ROTATE START
MODAL-ROTATE END
MODAL-Interface Portrait
MODAL-Interface LANDSCAPE[PORTRAIT]
Home button position: top
Keyboard Appears: topDEBUG:
APP DELEGATE- ADD SPliTVIEWCONTRolLER
DETAIL-Interface Portrait
ROOT-Interface Portrait
ROOT-Interface Portrait
DETAIL-Interface Portrait
MODAL-Interface Portrait
MODAL DID LOAD
MODAL-ROTATE START
MODAL-ROTATE END
MODAL-Interface Portrait
MODAL-Interface Portrait[LANDSCAPE]
Home button position: right
Keyboard Appears: rightDEBUG:
APP DELEGATE- ADD SPliTVIEWCONTRolLER
DETAIL-Interface Portrait
ROOT-Interface Portrait
ROOT-Interface Portrait
DETAIL-Interface Portrait
MODAL-Interface LANDSCAPE
MODAL DID LOAD
MODAL-ROTATE START
MODAL-ROTATE END
MODAL-Interface Portrait
MODAL-Interface LANDSCAPE
这是发生了什么:
>该应用程序已启动.
>根据设备的方向,屏幕旋转事件排队等待现有视图控制器.
>在出现屏幕旋转之前,将使用视图控制器中的现有方向创建新的视图控制器.
>处理屏幕旋转事件.
>您的新视图控制器以错误的方向动画存在.
这基本上是UIKit的竞争条件.其中一些细节是推测,但效果显而易见.
幸运的是,这很容易解决.
而不是直接创建新视图,而是将其安排在主队列上进行处理.它将在调度当前事件后完成,其中包括旋转事件.
当前:
[self presentModalVIEwController:newVIEwController animated:YES];
固定:
dispatch_async(dispatch_get_main_queue(),^{ [self presentModalVIEwController:newVIEwController animated:YES];}); 使用这个新代码,您可以获得以下序列:
>该应用程序已启动.>根据设备的方向,屏幕旋转事件排队等待现有视图控制器.>在出现屏幕旋转之前,创建新视图控制器的代码已排队但未执行.>处理屏幕旋转事件.>您的新视图控制器是使用视图控制器中的正确方向创建的.>您的新视图控制器以正确的方向动画存在.
总结以上是内存溢出为你收集整理的objective-c – iPad键盘出现方向错误全部内容,希望文章能够帮你解决objective-c – iPad键盘出现方向错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)