在UIViewController的viewDidLoad
方法中:
NSLog(@"frame: %f %f", self.view.frame.size.width, self.view.frame.size.height);
设备处于横向状态:
frame: 748.000000 1024.000000
设备处于纵向状态:
frame: 768.000000 1004.000000
答案 0 :(得分:12)
在viewDidLoad
中,框架可能没有调整到影响其最终尺寸的所有内容,例如旋转,其他视图等。通常最好只在此处创建和设置对象;您可以在viewWillLayoutSubviews
中检查最终的框架。
答案 1 :(得分:3)
视图控制器没有大小。它的大小视图或窗口。
您可以使用.frame
或.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;
}
答案 2 :(得分:3)
您应该使用self.view.bounds
代替。
答案 3 :(得分:1)
您可以将其记录为:
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;
答案 4 :(得分:0)
这是视图控制器中主视图的当前大小。观点以点数衡量。
请注意,iPad屏幕的大小为1024x768,但您在NSLog中获得的大小没有顶部的状态栏,即20点高。