处理屏幕尺寸的正确方法

时间:2017-06-15 06:36:28

标签: ios objective-c xcode storyboard

我大约8年前开始为iOS开发,并在几年前重新开始使用它。从我开始的时间开始,很多时候都发生了变化,特别是我们现在拥有的屏幕尺寸数量。

现在我正在故事板中为每个屏幕尺寸设计多个视图控制器。我开始基于iPhone 6 Plus,我的设备设计屏幕,然后制作具有不同尺寸框架的新视图控制器,并根据我工作的屏幕与我的iPhone 6 Plus屏幕之间的百分比差异来缩放其子视图

这是我点击按钮时运行的代码。它确定用户的屏幕大小并显示相应的视图控制器。

CGRect          screenBounds    = [[UIScreen mainScreen] bounds];
UIStoryboard    *storyboard     = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

MyViewController *myViewController;

if (screenBounds.size.width == 320.0 && screenBounds.size.height == 480.0)
    myViewController = [storyboard instantiateViewControllerWithIdentifier:@"iPhone4MyViewController"];
else if (screenBounds.size.width == 320.0 && screenBounds.size.height == 568.0)
    myViewController = [storyboard instantiateViewControllerWithIdentifier:@"iPhone5MyViewController"];
else if (screenBounds.size.width == 375.0 && screenBounds.size.height == 667.0)
    myViewController = [storyboard instantiateViewControllerWithIdentifier:@"iPhone6MyViewController"];
else if (screenBounds.size.width == 414.0 && screenBounds.size.height == 736.0)
    myViewController = [storyboard instantiateViewControllerWithIdentifier:@"iPhone6PlusMyViewController"];

// Etc. for iPad's, then present

我的问题是,这是设计和展示不同尺寸屏幕的合适方式吗?这似乎比我真正应该做的更多的工作。

2 个答案:

答案 0 :(得分:1)

首先,您必须使用自动布局

其次,在使用自动布局时,您会看到无法根据设备尺寸的宽高比设置左/右/上/下距离。

假设您有一个按钮,它的超视距离已经离开距离(超前约束)40。您无法使用autolayout根据设备大小使用宽高比。

如何解决此问题?

您必须根据设备大小以编程方式计算该距离。

创建一些像这样的常量。

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_RATIO_RESPECT_OF_IPHONE_6P (SCREEN_MAX_LENGTH/736.0)

现在,如果您的基本布局是iphone6Plus,那么只需将 SCREEN_RATIO_RESPECT_OF_IPHONE_6P 左侧距离(前导约束)相乘。这里 736 是iphone 6 plus height。

像这样

yourButtonLeftDistance.constant = 30*SCREEN_RATIO_RESPECT_OF_IPHONE_6P

就是这样。您现在正在以纵向模式支持所有设备。

答案 1 :(得分:0)

无需为iPhone 5,6,7创建单独的xib。您可以简单地使用自动布局,约束和大小类。