Ich versuche gerade, einen Knopf in eine Kreisform zu bringen und hier ist mein Code:

  var raffleButton:UIButton = {
    var button = UIButton()
    button.translatesAutoresizingMaskIntoConstraints = false
    button.titleLabel?.font = UIFont(name: "AvenirNext-Bold", size: 19)
    button.setTitle("Tap To Enter Raffle!", for: .normal)
    button.setTitleColor(UIColor.red, for: .normal)
    button.backgroundColor = .white
    button.layer.masksToBounds = true

    button.frame = CGRect(x: 1600, y: 160, width: 160, height: 160)
    button.layer.cornerRadius = button.frame.width/2

    return button
}()

Wenn ich jedoch den Code ausführe, ist die Schaltfläche entstellt und sieht wie folgt aus ... rund und fußballartig. Bildbeschreibung hier eingeben

Gibt es einen Grund, warum die Schaltfläche so aussieht, als wäre sie ein Kreis?

0
Captain Code 22 Feb. 2020 im 13:24

3 Antworten

Beste Antwort

Sie haben einige Verwirrung darüber, ob Sie Autolayout verwenden oder nicht.

Sie haben translatesAutoresizingMaskIntoConstraints auf false gesetzt, aber dann versuchen Sie, den Frame zu manipulieren.

Wenn Sie Einschränkungen hinzufügen, um die Breite und Höhe festzulegen, erhalten Sie ein Ergebnis, das näher an dem liegt, wonach Sie suchen. Sie müssen jedoch Ihre Beschriftung oder Schriftart anpassen, damit es passt:

var raffleButton:UIButton = {
    var button = UIButton()
    button.translatesAutoresizingMaskIntoConstraints = false
    button.titleLabel?.font = UIFont(name: "AvenirNext-Bold", size: 19)
    button.setTitle("Tap To Enter Raffle!!", for: .normal)
    button.setTitleColor(UIColor.red, for: .normal)
    button.backgroundColor = .white
    button.layer.masksToBounds = true

    button.heightAnchor.constraint(equalToConstant: 160).isActive = true
    button.widthAnchor.constraint(equalToConstant: 160).isActive = true
    button.layer.cornerRadius = 80

    return button
}()

enter image description here

1
Paulw11 22 Feb. 2020 im 10:46

Ihre Tastenhöhe entspricht der Tastenbreite und stellen Sie dann diesen Code ein.

anyButton.backgroundColor = .clear

anyButton.layer.cornerRadius = anyButton.frame.height / 2

anyButton.layer.borderWidth = 1

anyButton.layer.borderColor = UIColor.black.cgColor
1
Khushal iOS 22 Feb. 2020 im 12:37

Da Sie button.translatesAutoresizingMaskIntoConstraints = false festgelegt haben, funktioniert dieser Code nicht button.frame = CGRect(x: 1600, y: 160, width: 160, height: 160). Die Größe der Schaltfläche wird während des Layoutvorgangs geändert (nicht mehr (160, 160)). Daher ist es kein Kreis.

Sie können entweder button.translatesAutoresizingMaskIntoConstraints = false ändern oder versuchen, die cornerRadius der Schaltfläche in der viewDidLayoutSubviews -Methode einzustellen.

1
Luan Nguyen 22 Feb. 2020 im 10:47