ios - 根据用户使用的 iPhone 更改约束值
问题描述
因为所有 iPhone 都使用 wC hR 屏幕类别,所以我无法找到一种方法来更改 iPhone 11 Pro max 和 iPhone 8 之间的某些限制,因为 iPhone 8 的屏幕尺寸非常不同。
有没有办法这样做?或者我只需要想出一个适合所有 iPhone 屏幕尺寸的设计
解决方案
我认为检查每个 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 设计中做的另一件事,可能不是定义特定约束,例如width
orheight
或 otheranchor
的常量,而是将视图的锚约束定义为与其他视图的锚约束成比例;例如,您可能希望视图的宽度始终为其容器宽度的一半或大约视觉上的一半,您可以使用multiplier
:
childView.widthAnchor.constraint(equalTo: containerView.widthAnchor, multiplier: 0.5).isActive = true
这完全取决于哪种策略更适合constraints
您想要扩展的类型,以及您希望如何扩展它们,但我认为遵循这两种思维方式可以为您带来在不同 iPhone 屏幕上缩放的良好 UI。
推荐阅读
- python - 在 Django 中将 Python 注入到 Include 标记中
- javascript - 暂停功能使游戏崩溃
- javascript - onScroll 属性在 reactjs 中不起作用
- c# - SetOutputToDefaultAudioDevice() 获取 NullException
- css - 如何使滚动条仅在 Chrome、Safari 和 Opera 中悬停时可见?
- python - 使用 {} 和 I 分隔符在 Python 中展开数组
- python - 如何解决价值观问题?
- firebase - Firebase not-in 和 != 运营商错误有人知道为什么吗?
- angular - Angular 测试模拟 ContentChild
- java - 无法创建 Java 虚拟机,并显示消息:“-Djava.ext.dirs=./lib 不受支持。请改用 -classpath。”