在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
.
视图控制器没有大小。它的视图或窗口的大小。您可以使用.frame
or.bounds
方法来获取它。您也可以使用以下方法轻松打印矩形,
NSLog("Frame: %@", NSStringFromCGRect(self.view.frame));
NSLog("Frame: %@", NSStringFromCGRect(self.view.window.frame));
您还可以使用[UIScreen mainScreen].bounds
获取全屏的大小。对于状态栏,您将始终在 x 或 y 方向上获得 20 像素的偏移,具体取决于您的方向。
不管发生什么,框架返回高度和宽度,假设设备处于纵向模式,主页按钮向下。所以当设备处于横向模式时,状态栏在右侧,宽度减少了 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;
}
你应该self.view.bounds
改用。
您可以将其记录为:
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 磅高。