我有一个iPad应用程序。在横向方向上,UIViewController
的视图实际宽度= 1024px
和height = 768-20(statusBar) - 44(navigationBar)= 704px
。获取UIViewController视图的正确范围
所以我想得到这[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));
}
所以,问题是..我怎样才能得到正确的观点在一开始绑定?
如果你正在创建大视图,可能会延迟视图外观,你可以通过使用'viewWillAppear'减少延迟 – 2014-08-09 08:07:26
我试过viewWillAppear,它不能按要求工作,看来边界计算是在视图出现之后完成的 – Billy 2016-05-07 18:17:22
我强烈建议**不要**使用'viewDidAppear '你的视图在屏幕上,用户可以看到这一点,你做的改变会引起突然和可见的毛刺,它也不会帮助你响应旋转期间视图大小的变化(等等)。 'viewWillLayoutSubviews'](http://stackoverflow.com/a/42275589/2547229)(披露:链接到我的答案)这是iOS处理这个的方式。 – Benjohn 2017-02-16 13:52:57