IT-Swarm.Net

IPhone/IPad:如何以编程方式获取屏幕宽度?

嗨,我想知道是否有办法以编程方式获得宽度。

我正在寻找足以容纳iphone 3gs,iphone 4,ipad的东西。此外,宽度应根据设备是纵向还是横向(对于ipad)而改变。

谁知道怎么做?我一直在寻找...谢谢!

79
foreyez

看看 UIScreen

例如。

CGFloat width = [UIScreen mainScreen].bounds.size.width;

如果您不想包含状态栏(不会影响宽度),请查看applicationFrame属性。

UPDATE: 事实证明UIScreen(-bounds或-applicationFrame)没有考虑当前的界面方向。更正确的方法是询问你的UIView的界限 - 假设这个UIView已被它的View控制器自动旋转。

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    CGFloat width = CGRectGetWidth(self.view.bounds);
}

如果视图未由视图控制器自动旋转,则需要检查界面方向以确定视图边界的哪个部分表示“宽度”和“高度”。请注意,frame属性将为您提供UIWindow坐标空间中视图的矩形(默认情况下)将不考虑界面方向。

195
Alan Rogers
CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat width = CGRectGetWidth(screen);
//Bonus height.
CGFloat height = CGRectGetHeight(screen);
11
thyrgle

这可以在 3行代码中完成

// grab the window frame and adjust it for orientation
UIView *rootView = [[[UIApplication sharedApplication] keyWindow] 
                                   rootViewController].view;
CGRect originalFrame = [[UIScreen mainScreen] bounds];
CGRect adjustedFrame = [rootView convertRect:originalFrame fromView:nil];
6
memmons

从iOS 9.0开始,无法可靠地获得方向。这是我用于仅为肖像模式设计的应用程序的代码,因此如果应用程序以横向模式打开,它仍然是准确的:

screenHeight = [[UIScreen mainScreen] bounds].size.height;
screenWidth = [[UIScreen mainScreen] bounds].size.width;
if (screenWidth > screenHeight) {
    float tempHeight = screenWidth;
    screenWidth = screenHeight;
    screenHeight = tempHeight;
}
0
Bobby

使用:

NSLog(@"%f",[[UIScreen mainScreen] bounds].size.width) ;
0
Nick

使用此代码会有所帮助

[[UIScreen mainScreen] bounds].size.height
[[UIScreen mainScreen] bounds].size.width
0
Shahzaib Maqbool