视图控制器处于横向模式,但我从纵向模式获取框架?
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];
【讨论】:
以上是关于视图控制器处于横向模式,但我从纵向模式获取框架?的主要内容,如果未能解决你的问题,请参考以下文章