UIButton 框架不会随着使用 Swift 5 的可访问性大字体而增加

Mum*_*ain 4 accessibility font-size uibutton ios swift

UIButton 标题(.body 或 .headline)的大无障碍字体大小不会增加按钮的框架,而只会增加标题文本。在下面的屏幕截图中可以清楚地看到:

https://www.dropbox.com/s/b62dz7f0qvw8tf4/Screenshot%202019-08-21%20at%2012.48.16%20PM.png?dl=0

约束只是顶部,前导和尾随,也在代码中我添加了 2 行:

button.adjustsImageSizeForAccessibilityContentSizeCategory = true
button.titleLabel?.numberOfLines = 0
Run Code Online (Sandbox Code Playgroud)

黄色背景色是按钮的,因此标识只有可点击的区域是黄色区域。我想增加按钮框架,以便整个文本区域变得可点击。

Don*_*Mag 6

多行按钮标签首先存在一个问题 - 我认为这与使用无障碍字体没有直接关系。

尝试使用此按钮子类:

class MultilineTitleButton: UIButton {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    func commonInit() -> Void {
        self.titleLabel?.numberOfLines = 0
        self.titleLabel?.textAlignment = .center
        self.setContentHuggingPriority(UILayoutPriority.defaultLow + 1, for: .vertical)
        self.setContentHuggingPriority(UILayoutPriority.defaultLow + 1, for: .horizontal)
    }

    override var intrinsicContentSize: CGSize {
        let size = self.titleLabel!.intrinsicContentSize
        return CGSize(width: size.width + contentEdgeInsets.left + contentEdgeInsets.right, height: size.height + contentEdgeInsets.top + contentEdgeInsets.bottom)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        titleLabel?.preferredMaxLayoutWidth = self.titleLabel!.frame.size.width
    }
}
Run Code Online (Sandbox Code Playgroud)

它设置 titleLable 的.numberOfLines = 0.textAlignment = .center和 拥抱优先级,然后覆盖intrinsicContentSize以告诉自动布局 titleLabel 的正确大小。