【问题标题】:Swift - responsive constraints & item sizesSwift - 响应式约束和项目大小
【发布时间】:2026-01-18 09:00:02
【问题描述】:

我目前正在努力解决一个基本的初学者问题。我的应用程序应该在所有不同的 iPhone 上运行。我现在的问题是我的约束并没有真正响应。

示例:

正如您在 iPhone 11 上看到的,一切看起来都非常完美,但在 iPhone 6s 上有时会有点混乱。

我的问题是,有没有一种简单的方法可以让我的设计具有响应性?不仅是约束条件,还有文本(例如第三张图片中的“主要愿望清单”)。

顺便说一句,我正在以编程方式做所有事情。对此的任何帮助表示赞赏:)

【问题讨论】:

  • 好的,使用自动缩放字体可以轻松解决文本问题,
  • 约束“响应式”。这正是约束的含义:响应式。如果您的界面没有按照您想要的方式出现,那么您的约束是错误的(出于您的目的)。不幸的是,“有时有点混乱”不是描述性的,我们不知道您的限制是什么,也不知道您希望 iPhone 6s 上的界面是什么样的,因此无法提供帮助。
  • 你的设计是响应式的,“在 iPhone 6s 上它有时会有点混乱。”是主观的。想象一下,您要要求开发人员使用 iPhone X 定义的设计创建一个应用程序。在验证项目时,您说该应用程序在 iPhone 8 和 iPhone 11 Max 上没有您希望的响应。您必须通过说明布局在不同屏幕尺寸上的表现来明确定义设计,才能说某些东西没有按您的意愿工作。

标签: ios swift autolayout constraints


【解决方案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

【讨论】: