繁体   English   中英

iOS 动态类型 - 设置最小字体大小

[英]iOS dynamic type - set minimum font size

我绝对希望在 iOS 应用程序中尽可能多地使用动态类型 - 我喜欢用户可以选择他们喜欢的任何大小的想法。

然而,当字体大小设置为一些较低的值时,该应用程序最终看起来非常荒谬,一侧有很小的文本和大量的空白。 就我个人而言,我将我的手机设置为最小的字体(这对于消息和电子邮件来说似乎是完美的),但不会对导致此应用程序的布局犹豫不决。 (由于图像的固定大小,无法为较小的字体修复此布局。)

简而言之,我正在寻找一种方法来设置正文文本或特定标签的最小字体大小,而不管动态类型是什么,或者一种阻止某些动态类型级别的方法。

尝试为支持动态类型的标签设置最小字体大小。

在 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)
    }
}

Dynamic Type功能与文本样式(自 iOS 11 起有 11 种可能的选择)一起使用,用于强调某些清晰内容的重要性或仅用于构建演示文稿。

Apple 建议的字体大小值可以自定义,但在我看来,它们从一种特定字体大小到另一种字体大小的大小变化应该由系统保留和处理。

设置最小字体大小的问题在于,根据文本样式目的的定义,每个文本样式不能相同 设置最小字体大小意味着通过仅定义默认字体(大大小)来为每种文本样式设置最小字体大小,该默认字体大小将根据上述变体说明自动提供可用的最小大小。

但是,如果您确实想施加最小尺寸,请遵循@KrishnaDattShukla 的解决方案(在这种情况下也应实施添加文本样式差异)自定义字体以使系统工作。 注意新的字体大小值,以免在特定文本大小下使不太重要的文本样式比更重要的文本样式大……例如, Caption1文本样式的大小范围约为 3.9 倍,而LargeTitle是只有 1.8 倍!!!

除了添加@Krishna Datt Shukla 使用的通知之外,您还可以在 View 或 ViewController 中覆盖 traitCollectionDidChange:

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
   if traitCollection.preferredContentSizeCategory < .small {
       dynamicLabel.font = dynamicLabel.font.withSize(15)
    } else {
       // setup your font again
    }
}

请注意,Accessibility Inspector 在这些通知方面具有误导性,因此最好使用控制中心或使用模拟器设置在设备中进行测试。

在 SwiftUI (iOS 14.0)

为了避免使用动态类型和可访问性文本功能的非常小的字体大小,有一个 minimumScaleFactor 修饰符,其工作方式如下:

struct ContentView: View {
   
    var body: some View {
       Text("Hello World")
         .minimumScaleFactor(0.5)
    }
}

这将避免在使用动态类型时过多地缩放文本。 在此示例中,如果在 minimumScaleFactor 修饰符中使用值 0.5,则文本不应小于其通常大小的一半。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM