处理屏幕尺寸的正确方法
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。您可以简单地使用自动布局、约束和尺寸类。
【讨论】:
以上是关于处理屏幕尺寸的正确方法的主要内容,如果未能解决你的问题,请参考以下文章