我目前正在实施支持动态字体大小(用于辅助功能)的iOS应用程序。我阅读了Apple关于此事的文档[1],并说明了以下内容:
使用文本样式常量返回的字体用于表示 应用程序中的所有文本,而不是用户界面元素中的文本,例如 按钮,条形图和标签。
为什么?调整应用程序中的按钮等元素并不是特别重要,因为那些是用户与应用程序交互的部分吗?当用户将动态类型字体大小设置为非常大时,这会变得更糟,因为像按钮这样的元素更难以看到,因为其他所有内容变得更大,但按钮保持15pt字体大小。
我感兴趣的是:这背后的原因是什么?像按钮这样的元素是否只保留默认字体大小,其他人如何处理? 另外,我不清楚究竟应该是什么样的动态和什么不是 - 文本字段,文本字段的标签或解释性文本(标签)怎么样?
答案 0 :(得分:1)
Apple文档面对W3C WCAG 2.0 AA 1.4.4调整大小文本要求,表明"除了文字的标题和图像外,文本可以在没有辅助技术的情况下调整大小200%而不会丢失内容或功能。 (AA级)" (https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-scale)
在界面元素中解决动态字体大小是正确的。我会忽视Apple的文档。
答案 1 :(得分:0)
您需要继承或扩展UIButton,然后将Label添加为子视图。
class DynamicTextButton : UIButton{
var dynamicTextLabel: UILabel!
override init(frame: CGRect){
super.init(frame: frame)
setDynamicTextLabelAndConstraints()
self.heightAnchor.constraint(greaterThanOrEqualToConstant: 0.0)
self.adjustsImageSizeForAccessibilityContentSizeCategory = true
self.backgroundColor = ButtonStyle.TextButtonColor_Background
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
private func setDynamicTextLabelAndConstraints(){
dynamicTextLabel = UILabel(frame: frame)
dynamicTextLabel.font = ButtonStyle.TextButtonFont
dynamicTextLabel.translatesAutoresizingMaskIntoConstraints = false
dynamicTextLabel.font = UIFont.preferredFont(forTextStyle: .body)
//self.textColor = TextStyle.MainTextColor_Normal
dynamicTextLabel.adjustsFontForContentSizeCategory = true
dynamicTextLabel.numberOfLines = 0
dynamicTextLabel.lineBreakMode = NSLineBreakMode.byWordWrapping
dynamicTextLabel.heightAnchor.constraint(greaterThanOrEqualToConstant: 0.0)
self.addSubview(dynamicTextLabel)
dynamicTextLabel.topAnchor.constraint(equalTo: self.topAnchor, constant: 0.0).isActive = true
dynamicTextLabel.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 0.0).isActive = true
dynamicTextLabel.rightAnchor.constraint(equalTo: self.rightAnchor, constant: 0.0).isActive = true
dynamicTextLabel.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0.0).isActive = true
}
}
要使用:
var myDynamicButton = DynamicTextButton(frame: frame)
myDynamicButton.dynamicTextLabel.text = "My Button Title"
myDynamicButton?.translatesAutoresizingMaskIntoConstraints = false