嗨,我想知道是否有办法以编程方式获取宽度。
我正在寻找足以容纳iPhone 3GS,iPhone 4,iPad的通用产品。另外,宽度应根据设备是纵向还是横向(对于ipad)而改变。
有人知道该怎么做吗?我已经找了一段时间...谢谢!
嗨,我想知道是否有办法以编程方式获取宽度。
我正在寻找足以容纳iPhone 3GS,iPhone 4,iPad的通用产品。另外,宽度应根据设备是纵向还是横向(对于ipad)而改变。
有人知道该怎么做吗?我已经找了一段时间...谢谢!
Answers:
看一下UIScreen。
例如。
CGFloat width = [UIScreen mainScreen].bounds.size.width;
如果您不希望包含状态栏(不会影响宽度),请查看applicationFrame属性。
更新:事实证明,UIScreen(-bounds或-applicationFrame)没有考虑当前的界面方向。一种更正确的方法是询问您的UIView边界-假定此UIView已由其View控制器自动旋转。
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
CGFloat width = CGRectGetWidth(self.view.bounds);
}
如果视图控制器未自动旋转视图,则需要检查界面方向,以确定视图边界的哪一部分代表“宽度”和“高度”。请注意,frame属性将为您提供UIWindow坐标空间中的视图区域(默认情况下),该区域将不考虑界面方向。
CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat width = CGRectGetWidth(screen);
//Bonus height.
CGFloat height = CGRectGetHeight(screen);
这可以用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];
从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;
}
这是一种获取屏幕尺寸的快捷方法,这也考虑了当前界面的方向:
var screenWidth: CGFloat {
if UIInterfaceOrientationIsPortrait(screenOrientation) {
return UIScreen.mainScreen().bounds.size.width
} else {
return UIScreen.mainScreen().bounds.size.height
}
}
var screenHeight: CGFloat {
if UIInterfaceOrientationIsPortrait(screenOrientation) {
return UIScreen.mainScreen().bounds.size.height
} else {
return UIScreen.mainScreen().bounds.size.width
}
}
var screenOrientation: UIInterfaceOrientation {
return UIApplication.sharedApplication().statusBarOrientation
}
这些作为标准功能包括在: