Swift - 响应式约束和项目大小
Posted
技术标签:
【中文标题】Swift - 响应式约束和项目大小【英文标题】:Swift - responsive constraints & item sizes 【发布时间】:2020-01-21 20:17:53 【问题描述】:我目前正在努力解决一个基本的初学者问题。我的应用程序应该在所有不同的 iPhone 上运行。我现在的问题是我的约束并没有真正响应。
示例:
正如您在 iPhone 11 上看到的,一切看起来都非常完美,但在 iPhone 6s 上有时会有点混乱。
我的问题是,有没有一种简单的方法可以让我的设计具有响应性?不仅是约束条件,还有文本(例如第三张图片中的“主要愿望清单”)。
顺便说一句,我正在以编程方式做所有事情。对此的任何帮助表示赞赏:)
【问题讨论】:
好的,使用自动缩放字体可以轻松解决文本问题, 约束是“响应式”。这正是约束的含义:响应式。如果您的界面没有按照您想要的方式出现,那么您的约束是错误的(出于您的目的)。不幸的是,“有时有点混乱”不是描述性的,我们不知道您的限制是什么,也不知道您希望 iPhone 6s 上的界面是什么样的,因此无法提供帮助。 你的设计是响应式的,“在 iPhone 6s 上它有时会有点混乱。”是主观的。想象一下,您要要求开发人员使用 iPhone X 定义的设计创建一个应用程序。在验证项目时,您说该应用程序在 iPhone 8 和 iPhone 11 Max 上没有您希望的响应。您必须通过说明布局在不同屏幕尺寸上的表现来明确定义设计,才能说某些东西没有按您的意愿工作。 【参考方案1】: 使用Dynamic Type可以解决动态字体问题以下是如何使用动态类型根据内容大小自动缩放字体的示例:
guard let customFont = UIFont(name: "CustomFont-Light", size: UIFont.labelFontSize) else
fatalError("""
Failed to load the "CustomFont-Light" font.
Make sure the font file is included in the project and the font name is spelled correctly.
"""
)
label.font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: customFont)
label.adjustsFontForContentSizeCategory = true
https://developer.apple.com/documentation/uikit/uifont/scaling_fonts_automatically
使用自动收缩属性 遵循这个公认的答案
Scale text label by screen size
【讨论】:
以上是关于Swift - 响应式约束和项目大小的主要内容,如果未能解决你的问题,请参考以下文章