视图控制器处于横向模式,但我从纵向模式获取框架?

Posted

技术标签:

【中文标题】视图控制器处于横向模式,但我从纵向模式获取框架?【英文标题】:A view controller is in landscape mode, but I'm getting the frame from portrait mode? 【发布时间】:2011-10-03 04:41:44 【问题描述】:

我有一个带有表格视图的设置视图控制器。表视图应该将其框架设置为视图控制器的框架。我的应用只支持横向模式,所以这是我一直在的方向。

但是,当设置视图控制器加载时,表格视图具有视图控制器的纵向模式框架,即使它是横向的(360 x 480,而应该是 480 x 360)。

此外,当我检查设备是否认为它处于纵向模式时,它返回 true。

是什么导致了问题,我该如何解决?

【问题讨论】:

【参考方案1】:

当您拨打[UIView init] 时,它会默认为纵向模式下您设备的屏幕尺寸(iPad 也是如此,但尺寸更大)。 在[UIViewController viewDidLoad] 内部,self.view 也将默认为这个大小。

仅对层次结构中的顶部视图(控制器)进行屏幕旋转,并且旋转消息通过支持此行为的容器 VC(例如 UINavigationController、UITabBarController)转发。

如果您希望正确调整视图大小,请使用[UIView initWithFrame:self.view.bounds] 创建视图。 Insinde UIViewController 您只有在调用 viewDidLoad 之前有机会覆盖 loadView 方法来设置框架(或者您可以为横向使用不同的 XIB)。您还可以通过在 viewDidLoad 中设置其框架来硬编码视图的大小

【讨论】:

【参考方案2】:

您可以使用 viewWillAppear 在视图显示之前调整其大小

【讨论】:

【参考方案3】:

你必须在你的设置视图控制器中实现这个:-

-(void)viewWillAppear:(BOOL)animated
    [super viewWillAppear:animated];
    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait];
    

【讨论】:

以上是关于视图控制器处于横向模式,但我从纵向模式获取框架?的主要内容,如果未能解决你的问题,请参考以下文章

UISplitViewController 在横向模式下出现纵向

如何始终将视图控制器保持在纵向模式?

在 iPad 上处于横向模式时水平翻转视图控制器

将纵向视图控制器推到横向视图控制器上?

设置为横向模式时视图位置不正确

Xcode 说 UIView 在纵向时处于横向模式