纵向显示警告视图,横向显示iPad,无法旋转到除“其他”横向(180度)以外的任何位置

问题描述 投票:2回答:2

更新:已解决。请参阅底部的修复。

在支持所有方向的iPad应用程序中,如果该应用程序横向加载,则会发生奇怪的事情:

  1. 警告视图以纵向显示,即使其余视图以横向显示
  2. 将iPad从横向旋转到纵向不会触发旋转(也不会触发任何shouldAutorotate样式方法。)>
  3. 将iPad旋转180度(至“其他风景”)会触发旋转,此后,iPad的行为就像是正常的(即旋转时正确旋转为纵向和横向)。
  4. 下面的警告视图屏幕。很奇怪任何想法为什么会发生这种情况?仅当横向加载时才发生-纵向加载然后旋转到横向效果很好。“风景!”

Solution:

发生此问题的原因是,在应用程序完成加载后(更具体地说,在应用程序的viewDidAppear:方法中),我在主视图控制器顶部(以模态方式)添加了UIViewController。

iOS在事情开始后向当前/主视图控制器发送了(4)个shouldAutorotateToInterfaceOrientation:调用,以确定当前支持的方向。当我很快添加另一个VC时,这发生在上述调用的中间。因此,我只接到一个或两个电话(“肖像”,因为它以纵向开始)。

然后,主视图控制器在横向方向上默认支持“否”,但是新添加的视图控制器(也被询问方向)现在很高兴地回答“是”。

如果我删除了另一个VC(处于横向状态),我将意识到我的主视图控制器被卡在肖像中。所以我有一个人像视图,在它上面有一个风景视图。警报和此类信息注意了前者的方向,因此上述灾难性的结果。

另外,如果我尝试旋转为纵向,则无法进行,因为主视图控制器已经处于纵向状态。旋转到风景也是不可能的,因为另一个视图控制器已经在风景中。只有当我进行“横向旋转但又旋转另一个”时,两个视图控制器才同意需要旋转,因此设备旋转了。

我的解决方法是将其他控制器的创建稍微延迟一下。使用performSelector:withObject:afterDelay.-0似乎可以工作,但是我只是将其设置为1。看起来有点怪异,出现了主要的vc,然后出现了另一个vc,但是比上面的要好。

更新:已解决。请参阅底部的修复。在支持所有方向的iPad应用程序中,如果该应用程序横向加载,则会发生奇怪的事情:警报视图以纵向显示,即使其余视图位于...

iphone objective-c rotation landscape portrait
2个回答
0
投票

发生此问题的原因是,一旦应用程序完成加载(更具体地说,在应用程序的viewDidAppear:方法中),我就在主视图控制器顶部(以模态方式)添加了UIViewController。


0
投票

使用UIAlertController代替UIAlertview

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.