objective-c – iPad键盘出现方向错误
我有一个splitView应用程序,它有一个rootViewController和DetailsViewController
当应用程序加载detailsViewController弹出一个包含UINavigationBar的Modal viewController. UINavigationBar上有一个搜索栏(以编程方式设置).当焦点进入搜索栏时,键盘会弹出. 但是,根据设备(模拟器)的方向,键盘会以错误的方向弹出.键盘始终显示为ipad处于“正常”方向(即主键处于侧面) 我在所有的shouldAutoRotate方法中返回YES: - (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation; 为了尝试找出发生了什么,我每次都为每个类添加一些调试代码,以便在每次触发shouldAutorotate事件时记录interfaceOrientation,同时还显示模式viewDidLoad方法何时触发.我为每个方向做了一个测试:调试输出如下所示. 调试显示,无论实际的设备方向如何,rootViewController和DetailsViewController接口方向始终为Portrait. 唯一正确的日志(其中接口方向=设备方向)是每次测试中触发模态shouldAutorotate事件的第一个和最后一个(第三个)时间. 如果我在应用程序启动后旋转iPad,则键盘将以正确的方向显示. 任何人都可以阐明为什么会发生这种情况以及如何避免它?
解决方法
在呈现模态视图控制器之前,您需要让iOS处理旋转事件.
这是发生了什么: >该应用程序已启动. 这基本上是UIKit的竞争条件.其中一些细节是推测,但效果显而易见. 幸运的是,这很容易解决. 而不是直接创建新视图,而是将其安排在主队列上进行处理.它将在调度当前事件后完成,其中包括旋转事件. 当前: [self presentModalViewController:newViewController animated:YES]; 固定: dispatch_async(dispatch_get_main_queue(),^{ [self presentModalViewController:newViewController animated:YES]; }); 使用这个新代码,您可以获得以下序列: >该应用程序已启动.>根据设备的方向,屏幕旋转事件排队等待现有视图控制器.>在出现屏幕旋转之前,创建新视图控制器的代码已排队但未执行.>处理屏幕旋转事件.>您的新视图控制器是使用视图控制器中的正确方向创建的.>您的新视图控制器以正确的方向动画存在. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |