如何从View Controller中获取UIView的大小?

时间:2013-05-07 14:04:51

标签: ios objective-c uiview uiviewcontroller

在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

5 个答案:

答案 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点高。