accessibility - 你如何使 UISegmentedControl 遵循动态类型?
问题描述
我已经开始将动态类型和首选字体应用到我的应用程序中。视图控制器中唯一不符合的部分是一对分段控制器,当标签等都在设置中使用较大的文本滑块展开时,它们会保持很小的状态。
解决方案
截至 2018 年 10 月,它似乎UILabel
是唯一具有内置可访问性的动态更新行为的类,以adjustsFontForContentSizeCategory
布尔标志的形式。如果将此标志设置为true
on a UILabel
,并为标签设置动态类型字体,则标签将根据当前内容大小设置动态调整自身(及其自身框架)的大小。这也适用于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())
}
推荐阅读
- java - 绝对值计算不起作用...?
- windows - XAMPP - php_body_write 无法位于 c:\xampp\php\ext\php_mssql.dll (Windows)
- java - 在 Java 和 C# 中使用 POSIX 删除所有标点符号会产生不同的输出
- r - 将绘图添加到列表 ggplot2
- autodesk-forge - 是否有用于 BIM360 提交的 API?
- php - Symfony 应用程序和 API 在同一个 Apache 虚拟主机上
- javascript - JQuery DataTable 中的列排序——当通过 Javascript 提供数据时
- r - 将日期时间从 12 小时转换为 24 小时日期时间,R 中没有 AM/PM
- r - 运行 h2o.hit_ratio_table 出现问题
- javascript - Jquery Mobile Ajax 发布插入数据