【发布时间】:2020-10-25 20:11:49
【问题描述】:
我已经开始在我的应用中应用动态类型和首选字体。视图控制器中唯一不符合的部分是一对分段控制器,当标签等都在设置中使用较大的文本滑块展开时,它们会保持很小的状态。
【问题讨论】:
标签: accessibility uisegmentedcontrol
我已经开始在我的应用中应用动态类型和首选字体。视图控制器中唯一不符合的部分是一对分段控制器,当标签等都在设置中使用较大的文本滑块展开时,它们会保持很小的状态。
【问题讨论】:
标签: accessibility uisegmentedcontrol
截至 2018 年 10 月,UILabel 似乎是唯一具有内置可访问性动态更新行为的类,其形式为 adjustsFontForContentSizeCategory 布尔标志。如果在UILabel 上将此标志设置为true,并为标签设置动态类型字体,则标签将根据当前内容大小设置动态调整自身(及其自身框架)的大小。这也适用于 UIButton 之类的东西,它在内部使用 UILabel 来显示文本。
对于像UISegmentedControl 这样的控件,不幸的是,似乎没有可以打开或关闭的布尔标志。以下是我的实现方式:
在您的viewDidLoad 或awakeFromNib 中或在您设置好视图后,您想注册内容大小更改通知:
NotificationCenter.default.addObserver(self,
selector:#selector(userChangedTextSize(notification:)),
name: UIContentSizeCategory.didChangeNotification,
object: nil)
现在在userChangedTextSize 方法中,您要重置分段控件上的字体:
@objc private func userChangedTextSize(notification: Notification) {
// Replace textStyle with whatever textStyle you want for your segmented control
segmentedControl.setTitleTextAttributes([
.font: UIFont.preferredFont(forTextStyle: textStyle)
], for: UIControl.State())
}
【讨论】:
在 UIKit 14 中,唯一支持“动态类型”功能的组件是
作为 UINavigationBar、UIBarButtonItem 和 UITableViewCell 一部分的 UILabel 也使用开箱即用的 Dynamic 类型。
仍然缺少该功能的 UIKit 组件有:
【讨论】:
button.titleLabel.adjustsFontForContentSizeCategory访问标签