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

时间:2017-01-19 17:15:25

标签: ios swift accessibility

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

然而,当字体大小设置为某些较低的值时,应用程序最终看起来非常荒谬,一边是小文本,另一边是整个空白区域。就个人而言,我的手机设置为最小的字体(它似乎非常适合消息和电子邮件),但对于此应用程序中的布局不会犹豫不决。 (由于图像的大小固定,因此无法为较小的字体修复此布局。)

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

4 个答案:

答案 0 :(得分: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)
    }
}

答案 1 :(得分:0)

Dynamic Type功能与文本样式(自iOS 11开始有11种可能的选择)一起使用,以强调某些易读内容的重要性或简单地组织演示文稿。

type size values suggested by Apple可以自定义,但是我认为size variation从一种特定类型的大小到另一种的大小应该由系统保留和处理。

设置最小字体大小的问题是,根据文本样式用途的定义,每种文本样式必须不同。 设置最小字体大小意味着通过定义默认的一个(大字体大小)来针对每种文本样式进行设置,该字体将根据上述变体说明自动提供可用的最小字体大小。

但是,如果您确实希望施加最小大小,请遵循@KrishnaDattShukla 的解决方案(在这种情况下,还应实现文本样式区分)customize your font系统工作。注意新的字体大小值,以便在特定的文本大小下不会使重要性较低的文本样式大于重要性更大的文本样式……例如,Caption1文本样式的大小范围约为3.9× ,而LargeTitle只有1.8×!!!

答案 2 :(得分:0)

除了添加@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
    }
}

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

答案 3 :(得分:0)

在SwiftUI(iOS 14.0)

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

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

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