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 - 响应式约束和项目大小的主要内容,如果未能解决你的问题,请参考以下文章

用Adobe XD 12更智能的快速完成响应式设计

Swift的响应式编程革命

第33章 项目实战-兼容式响应布局3

响应式设计中的字体大小和元视口

Swift 响应式编程

Swift 响应式编程