【发布时间】:2012-07-16 09:13:55
【问题描述】:
我有一个 iPad 应用程序。在横向上,UIViewController 的视图实际宽度 = 1024px 和高度 = 768 - 20 (statusBar) - 44 (navigationBar) = 704px。
所以我想得到这个[1024 x 704] 尺寸,我正在使用self.view.bounds。它返回[748 x 1024],这是错误的!但是当我旋转屏幕两次(当前 -> 纵向 -> 当前)时,视图的边界是正确的 - [1024 x 704]。
视图是这样初始化的:
- (void)loadView {
self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view.backgroundColor = [UIColor lightGrayColor];
}
边界是这样的:
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"bounds = %@", NSStringFromCGRect(self.view.bounds));
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
NSLog(@"bounds = %@", NSStringFromCGRect(self.view.bounds));
}
所以问题是.. 我怎样才能在一开始就获得正确的视图绑定?
【问题讨论】:
-
在我的情况下,使用
viewWillLayoutSubviews工作但有一个我不喜欢的延迟(大约一秒)。我试过viewDidLayoutSubviews,它工作正常。请记住,viewDidLayoutSubviews 可能会触发多次,具体取决于您对子视图的操作,因此您可能需要进行一些额外的检查。 developer.apple.com/documentation/uikit/uiviewcontroller/… -
@MohsenHK 嗨——你描述的情况似乎没有意义。
viewDidLayoutSubviews在viewWillLayoutSubviews之后被调用,所以它的延迟不能少。那有意义吗?我认为您遇到的延迟一定是由于发生了其他事情——也许是与动画的交互?
标签: ios xcode uiviewcontroller rotation bounds