处理屏幕尺寸的正确方法

Posted

技术标签:

【中文标题】处理屏幕尺寸的正确方法【英文标题】:Correct way to handle screen sizes 【发布时间】:2017-06-15 06:36:27 【问题描述】:

我大约在 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

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

【问题讨论】:

现在我们有了新的设计元素,叫做自动布局和约束。您无需为每个设备创建笔尖。一个设计将适用于所有 你支持纵向和横向吗? @DSDharma 好的,难学吗?你认为需要多长时间才能很好地理解它?现在在我看来,按照我目前的方式做这件事比必须学习全新的东西要快,因为我正试图尽快让这个应用程序出现。 @elk_cloner 不,只是肖像。 简单不难。查看更多关于自动布局的信息,有很多教程可供使用。 【参考方案1】:

首先你必须使用自动布局

其次,在玩自动布局时,您会发现无法根据设备尺寸的纵横比设置左/右/上/下距离。

假设您有一个按钮,距离它的超级视图有 40 的距离(领先约束)。您不能使用自动布局根据设备大小使用纵横比。

如何解决这个问题?

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

像这样创建一些常量。

#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 的高度。

喜欢这个

yourButtonLeftDistance.constant = 30*SCREEN_RATIO_RESPECT_OF_IPHONE_6P

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于处理屏幕尺寸的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

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

Android 模拟器没有检测到正确的屏幕尺寸?

为不同尺寸的屏幕获取正确的cornerRadius的问题

“CreateDC 失败,屏幕尺寸信息可能不正确”

ipad2020屏幕多大尺寸

ipad2020屏幕尺寸