首页 > 解决方案 > 根据用户使用的 iPhone 更改约束值

问题描述

因为所有 iPhone 都使用 wC hR 屏幕类别,所以我无法找到一种方法来更改 iPhone 11 Pro max 和 iPhone 8 之间的某些限制,因为 iPhone 8 的屏幕尺寸非常不同。

有没有办法这样做?或者我只需要想出一个适合所有 iPhone 屏幕尺寸的设计

标签: iosswiftiphonexcode

解决方案


我认为检查每个 iPhone 型号并不是真正可扩展的,而且似乎也是多余的。

1)在我看来,你可以做的事情是从你想要支持的基本 iPhone 型号开始,比如说 iPhone SE,让你的设计很好地适应 iPhone SE,然后在运行时放大到当前设备的屏幕尺寸

您将获得scale ratio诸如 1.2、1.8..etc 之类的内容,您可以(在运行时)将其应用于约束,例如font sizes

var scaleRatio: CGFloat = {
    let iPhoneSEWidth: CGFloat = 320
    let currentDeviceWidth = UIScreen.main.bounds.size.width
    return currentDeviceWidth/iPhoneSEWidth
}()

并且可以像这样应用:

label.font = font.size(12 * scaleRatio)

其中 12 是非常适合 iPhone SE(您的基础)的字体大小,然后在运行时它会缩放到您的基础屏幕大小和当前 iPhone 屏幕大小之间的当前比率。

2)您可以在 UI 设计中做的另一件事,可能不是定义特定约束,例如widthorheight或 otheranchor的常量,而是将视图的锚约束定义为与其他视图的锚约束成比例;例如,您可能希望视图的宽度始终为其容器宽度的一半或大约视觉上的一半,您可以使用multiplier

childView.widthAnchor.constraint(equalTo: containerView.widthAnchor, multiplier: 0.5).isActive = true

这完全取决于哪种策略更适合constraints您想要扩展的类型,以及您希望如何扩展它们,但我认为遵循这两种思维方式可以为您带来在不同 iPhone 屏幕上缩放的良好 UI。


推荐阅读