iOS 动态类型 - 设置最小字体大小
Posted
技术标签:
【中文标题】iOS 动态类型 - 设置最小字体大小【英文标题】:iOS dynamic type - set minimum font size 【发布时间】:2017-01-19 17:15:25 【问题描述】:我肯定希望在 ios 应用程序中尽可能多地使用动态类型 - 我喜欢用户可以选择他们喜欢的任何大小的想法。
但是,当字体大小设置为某些较低的值时,应用程序最终看起来非常荒谬,一侧的文字很小,并且有一大堆空白。就个人而言,我将手机设置为最小的字体(它似乎非常适合消息和电子邮件),但我对这个应用程序中的布局犹豫不决。 (由于图像的大小固定,因此无法针对较小的字体修复此布局。)
简而言之,我正在寻找一种方法来设置正文文本或特定标签的最小字体大小,而不管动态类型是什么,或者阻止某些动态类型级别的方法。
【问题讨论】:
您可以为要符合动态字体大小的对象分配属性或标签,并检查该值以确定哪些对象将使用动态字体大小 【参考方案1】:尝试为支持动态类型的标签设置最小字体大小。
在 Viewdidload 方法中 -
NotificationCenter.default.addObserver(self, selector: #selector(self.handleDynamicTypeChange), name: NSNotification.Name.UIContentSizeCategoryDidChange, object: nil)
在处理程序方法中 -
func handleDynamicTypeChange()
print("size category changed to --->\(UIApplication.shared.preferredContentSizeCategory)")
if (UIApplication.shared.preferredContentSizeCategory) == UIContentSizeCategory(rawValue: "UICTContentSizeCategoryXS") || (UIApplication.shared.preferredContentSizeCategory) == UIContentSizeCategory(rawValue: "UICTContentSizeCategoryS")
dynamicLabel?.font.withSize(12.0)
else
dynamicLabel?.font = UIFont.preferredFont(forTextStyle: .body)
【讨论】:
【参考方案2】:Dynamic Type
功能适用于文本样式(自 iOS 11 以来有 11 种可能的选择),用于强调某些清晰内容的重要性或仅用于构建演示文稿。
type size values suggested by Apple 可以自定义,但在我看来,它们的 size variation 从一种特定类型大小到另一种类型大小应保留并由系统处理。
设置最小字体大小的问题在于,根据文本样式用途的定义,每个文本样式都不能相同。 设置最小字体大小意味着通过仅定义默认的 (大尺寸) 为每种文本样式执行此操作,该默认值将根据上述变体说明自动提供可用的最小尺寸。
但是,如果您确实想施加最小尺寸,请按照@KrishnaDattShukla (在这种情况下也应实现添加文本样式区分)或customize your font 的解决方案让系统工作。注意新的字体大小值,以免在某个文本大小下,不太重要的文本样式比更重要的文本样式大...例如,Caption1
文本样式的大小范围约为 3.9×,而LargeTitle
只有1.8×!!!
【讨论】:
【参考方案3】:您也可以在 View 或 ViewController 中覆盖 traitCollectionDidChange,而不是像 @Krishna Datt Shukla 那样添加通知:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
if traitCollection.preferredContentSizeCategory < .small
dynamicLabel.font = dynamicLabel.font.withSize(15)
else
// setup your font again
请注意,Accessibility Inspector 对这些通知具有误导性,因此最好使用控制中心或使用模拟器设置在设备中进行测试。
【讨论】:
【参考方案4】:在 SwiftUI (iOS 14.0) 中
为了避免使用动态类型和可访问性文本功能非常小的字体,有 minimumScaleFactor 修饰符,其工作方式如下:
struct ContentView: View
var body: some View
Text("Hello World")
.minimumScaleFactor(0.5)
这将避免在使用动态类型时过度缩放文本。在此示例中,如果在 minimumScaleFactor 修饰符中使用值 0.5,则文本不应小于其通常大小的一半。
【讨论】:
以上是关于iOS 动态类型 - 设置最小字体大小的主要内容,如果未能解决你的问题,请参考以下文章