iPhone:获取当前视图尺寸或屏幕尺寸

33

你好,我想获取我的主视图的宽度和高度。我希望在横屏或竖屏模式下获得正确的值。我已经尝试了以下方法:


  NSLog(@"aaa %f", [UIScreen mainScreen].applicationFrame.size.width);
  NSLog(@"zzz %f", self.view.frame.size.width);

这些给出的数字是横屏模式下为300,竖屏模式下为320,没错,竖屏模式下更大。所以..我的视图占据整个屏幕(-状态栏),因此我期望在横屏模式下为480,在竖屏模式下为320。其余的像素去哪了?我需要硬编码这些值吗?谢谢。

3个回答

104

以下哪一行对你有用?

[[UIScreen mainScreen] bounds].size.height
[[UIScreen mainScreen] bounds].size.width

我想你可以减去状态栏的高度?也许我没理解你的问题。


1
这个代码可以正常工作,它返回横向和纵向相同的宽度和高度,但至少它能够正常工作。是的,我需要减去状态栏的高度。 - gyozo kudor
@Omar,在UIScreen之前需要多加一个[ - Aaron Brager
2
从iOS8开始,[UIScreen mainScreen].bounds是面向界面的(请查看WWDC 2014中的“iOS 8中的视图控制器进阶”会话),这意味着在iOS8的横屏模式下,高度和宽度被颠倒了。 - Andr3a88
@Andr3a88,感谢您提供的额外信息。这意味着原始答案比以前更令人满意。 - Omar

10

试一下这个:

UIWindow* window = [UIApplication sharedApplication].keyWindow;
NSLog(@"%f",window.frame.size.width);

6

以下是有用的宏,根据设备方向提供正确的尺寸:

#define SCREEN_WIDTH ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.height)
#define SCREEN_HEIGHT ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.width)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接