2017-10-22 2 views
1

ich in einer Situation bin, wo ich das Titlelabel der font-size eines UIButton Elements nach der Höhe des UIButton setzen will, so ist hier mein Setup:Set Titlelabel nach UIButton Höhe

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 
} 

Was geschieht?

Die Tasten Breite wird auf 33% der Breite der Ansicht -> gut

Die Tasten Höhe bis 10% der Höhe nach Ansicht eingestellt ist -> gut

Die Tasten Titlelabel Schriftgröße bleibt klein und skaliert nicht mit der Höhe der Tasten ... -> schlecht

Kann mir jemand das erklären?

Antwort

1

Eine mögliche Lösung für die Skalierung Ihres Etiketts mit der Höhe der Schaltflächen ist die Anpassung der Schriftgröße in der Methode viewDidAppear. Es ist wichtig, dass Sie das dort und nicht in viewDidLoad tun, da die Tastenhöhe in viewDidLoad noch nicht bekannt ist.

den folgenden Code snipped sollte die Schriftgröße Ihres Buttons skalieren die Hälfte der Größe der Tasten Höhe sein:

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

Wenn Ihr Titel sehr lang wird, wird es sich jedoch verkleinert passen in die Tastenbreite (weil Sie adjustsFontSizeToFitWidth auf True gesetzt haben).

Verwandte Themen