里面viewDidLoad
一个UIViewController的方法:
NSLog(@"frame: %f %f", self.view.frame.size.width, self.view.frame.size.height);
随着景观的设备:
frame: 748.000000 1024.000000
随着肖像的设备:
frame: 768.000000 1004.000000
里面viewDidLoad
一个UIViewController的方法:
NSLog(@"frame: %f %f", self.view.frame.size.width, self.view.frame.size.height);
随着景观的设备:
frame: 748.000000 1024.000000
随着肖像的设备:
frame: 768.000000 1004.000000
在viewDidLoad
,框架可能没有调整到所有影响其最终大小的东西,如旋转,其他的观点,等等。它通常最好只在此处创建和设置您的对象; 您可以检查在完成框架viewWillLayoutSubviews
。
您应该使用self.view.bounds
代替。
不存在一个视图控制器的尺寸。 它的视图或窗口的大小。 您可以使用.frame
或.bounds
方法得到它。 您也可以使用轻松打印RECT,
NSLog("Frame: %@", NSStringFromCGRect(self.view.frame));
NSLog("Frame: %@", NSStringFromCGRect(self.view.window.frame));
您也可以使用[UIScreen mainScreen].bounds
获得全屏幕的大小。 你总是会得到的是20像素x或y方向偏移,状态栏,这取决于你的方向。
无论发生什么情况,帧返回的高度和宽度,假定该装置处于纵向模式,与家庭按钮按下。 因此,当所述设备处于风景模式,状态栏是在右侧,并且宽度为20像素以下以腾出空间给状态栏。
编辑:后的iOS 8现在你在纵向和横向得到正确的宽度和高度。 即,因为它看起来 - 横向宽度=纵向高度。 当我在我的代码中使用,
CGRect frame = [[UIScreen mainScreen] applicationFrame];
CGSize size = frame.size;
if (![UIUtil isAfterIOS8]){
size.width = frame.size.height;
size.height = frame.size.width;
}
/* UIUtil.m */
+ (BOOL) isAfterIOS8 {
return [[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0;
}
您可以登录它:
NSLog(@"My view's frame is: %@", NSStringFromCGRect(myView.frame));
或者试试这个
CGFloat width = CGRectGetWidth(self.view.bounds);
CGFloat height = CGRectGetHeight(self.view.bounds);
要么
CGFloat height = [self.view frame].size.height;
CGFloat width = [self.view frame].size.width;
这是在你的视图控制器主视图的当前大小。 的意见以磅为单位。
需要注意的是iPad屏幕的点尺寸为1024x768,但是你在的NSLog所得到的大小是不会对顶部的状态栏,也就是20点高。