你如何使UISegmentedControl遵循动态类型?

时间:2018-05-24 11:26:32

标签: accessibility uisegmentedcontrol

我已经开始将动态类型和首选字体应用到我的应用中。视图控制器中唯一不符合的部分是一对分段控制器,当标签等都在设置中使用较大的文本滑块进行扩展时,这些控制器会保持顽固的小。

2 个答案:

答案 0 :(得分:1)

截至2018年10月,似乎UILabel是唯一具有adjustsFontForContentSizeCategory布尔标志形式的内置动态更新行为的类,可访问性是内置的。如果您在true上将此标志设置为UILabel,并为标签设置动态字体,则标签将根据当前内容大小设置动态调整其自身(和其自身的框架)的大小。这也适用于UIButton之类的东西,在内部使用UILabel来显示文本。

不幸的是,对于UISegmentedControl之类的控件,似乎没有布尔值标志可以打开或关闭。这是我的实现方式:

在您的viewDidLoadawakeFromNib中,或在设置视图之后,您要注册内容大小更改通知:

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

答案 1 :(得分:0)

在UIKit 14中,唯一支持“动态类型”功能的组件是

  • UILabel
  • UITextField
  • UITextview

作为UINavigationBar,UIBarButtonItem和UITableViewCell一部分的UILabel也使用开箱即用的动态类型。

仍然缺少该功能的UIKit组件是:

  • UIButton
  • UISegementedControl