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

在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 

viewDidLoad ,框架可能没有调整到影响其最终大小的所有事物,例如旋转,其他视图等。通常最好只在这里创build和设置对象; 你可以在viewWillLayoutSubviews检查最终化的框架。

没有视图控制器的大小。 它的视图或窗口的大小。 您可以使用.bounds.bounds方法来获取它。 你也可以轻松地打印矩形使用,

 NSLog("Frame: %@", NSStringFromCGRect(self.view.frame)); NSLog("Frame: %@", NSStringFromCGRect(self.view.window.frame)); 

您还可以使用[UIScreen mainScreen].bounds来获取全屏幕的大小。 您将始终在x或y方向上获取20像素的偏移,状态栏取决于您的方向。

无论发生什么情况,框架都会返回高度和宽度,假定设备处于纵向模式,并且主屏幕button处于closures状态。 因此,当设备处于横向模式时,状态栏位于右侧,宽度为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代替。

您可以将其logging为:

 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屏幕的大小为1024×768,但您在NSLog中获得的大小没有顶部的状态栏,高度为20分。