根据UIButton高度设置titleLabel

时间:2017-10-22 17:02:52

标签: swift layout uibutton constraints nslayoutconstraint

我处于这种情况,我想根据UIButton的高度设置一个UIButton元素的titleLabel字体大小,所以这是我的设置:

let button: UIButton = {
    let button = UIButton()
    button.translatesAutoresizingMaskIntoConstraints = false
    button.setTitle("title", for: [])
    button.titleLabel?.minimumScaleFactor = 0.5
    button.titleLabel?.numberOfLines = 1
    button.titleLabel?.adjustsFontSizeToFitWidth = true
    button.titleLabel?.lineBreakMode = .byClipping
    return button
}()

override func viewDidLoad() {
    super.viewDidLoad()

    self.view.addSubview(self.button)

    self.button.bottomAnchor.constraint(equalTo: self.someElement.topAnchor, constant: 0).isActive = true
    self.button.widthAnchor.constraint(equalTo: self.view.widthAnchor, multiplier: 0.33).isActive = true
    self.button.heightAnchor.constraint(equalTo: self.view.heightAnchor, multiplier: 0.1).isActive = true
    self.button.centerXAnchor.constraint(equalTo: self.view.centerXAnchor, constant: 0).isActive = true
}

会发生什么?

按钮宽度设置为视图宽度的33% - >好

按钮高度设置为视图高度的10% - >好

按钮titleLabel字体大小保持较小,并且按钮高度不会缩放...... - >坏

有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:2)

使用按钮高度缩放标签的一种可能解决方案是使用authors_list = ['Tom', 'John', 'Sara', 'Kati'] 方法调整字体大小。由于viewDidAppear中尚未知道按钮高度,因此在那里而不是viewDidLoad中执行此操作非常重要。

以下代码剪切应将按钮的字体大小缩放为按钮高度的一半:

viewDidLoad

如果您的标题变得很长,那么它将按比例缩小以适应按钮宽度(因为您已将override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // If you use a custom font, you have to replace systemFont with it button.titleLabel?.font = UIFont.systemFont(ofSize: button.frame.height * 0.5) } 设置为true)。