-4

viewDidLoadUIViewController 的方法内部:

NSLog(@"frame: %f %f", self.view.frame.size.width, self.view.frame.size.height);

使用横向设备:

frame: 748.000000 1024.000000

设备处于纵向:

frame: 768.000000 1004.000000
4

5 回答 5

13

viewDidLoad中,框架可能没有针对影响其最终大小的所有因素进行调整,例如旋转、状态栏高度变化、其他视图等。通常最好只在此处创建和设置对象;您可以在viewWillLayoutSubviews.

于 2013-05-07T14:09:33.233 回答
5

视图控制器没有大小。它的视图或窗口的大小。您可以使用.frameor.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;
}
于 2013-05-07T14:09:18.267 回答
3

你应该self.view.bounds改用。

于 2013-05-07T14:10:05.783 回答
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;
于 2013-05-07T14:49:54.057 回答
0

这是视图控制器中主视图的当前大小。视图以点为单位。

请注意,iPad 屏幕的大小(以磅为单位)为 1024x768,但您在 NSLog 中获得的大小没有顶部的状态栏,即 20 磅高。

于 2013-05-07T14:10:34.973 回答