如何从视图控制器内获得一个UIView的大小? [关闭](How do I get the si

2019-09-02 04:22发布

里面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

Answer 1:

viewDidLoad ,框架可能没有调整到所有影响其最终大小的东西,如旋转,其他的观点,等等。它通常最好只在此处创建和设置您的对象; 您可以检查在完成框架viewWillLayoutSubviews



Answer 2:

您应该使用self.view.bounds代替。



Answer 3:

不存在一个视图控制器的尺寸。 它的视图或窗口的大小。 您可以使用.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;
}


Answer 4:

您可以登录它:

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;


Answer 5:

这是在你的视图控制器主视图的当前大小。 的意见以磅为单位。

需要注意的是iPad屏幕的点尺寸为1024x768,但是你在的NSLog所得到的大小是不会对顶部的状态栏,也就是20点高。



文章来源: How do I get the size of a UIView from within the View Controller? [closed]