390 Stimmen

Wie fügt man mehrzeiligen Text zu einer UIButton hinzu?

Ich habe den folgenden Code...

UILabel *buttonLabel = [[UILabel alloc] initWithFrame:targetButton.bounds];
buttonLabel.text = @"Long text string";
[targetButton addSubview:buttonLabel];
[targetButton bringSubviewToFront:buttonLabel];

...die Idee ist, dass ich mehrzeiligen Text für die Schaltfläche haben kann, aber der Text ist immer durch das backgroundImage der UIButton verdeckt. Ein Logging-Aufruf, um die Unteransichten der Schaltfläche anzuzeigen, zeigt, dass das UILabel hinzugefügt wurde, aber der Text selbst ist nicht zu sehen. Ist dies ein Fehler in UIButton oder mache ich etwas falsch?

23voto

Md. Ibrahim Hassan Punkte 5056

SWIFT 3

button.titleLabel?.lineBreakMode = .byWordWrapping
button.titleLabel?.textAlignment = .center  
button.setTitle("Button\nTitle",for: .normal)

20voto

Amir Khorsandi Punkte 3144

Ich hatte ein Problem mit dem automatischen Layout, nachdem ich die Mehrzeiligkeit aktiviert hatte, war das Ergebnis wie folgt:
enter image description here
so dass die titleLabel Größe hat keinen Einfluss auf die Größe der Schaltfläche
Ich habe hinzugefügt Constraints auf Grund contentEdgeInsets (in diesem Fall war contentEdgeInsets (10, 10, 10, 10)
nach dem Aufruf makeMultiLineSupport() :
enter image description here
Ich hoffe, es hilft Ihnen (swift 5.0):

extension UIButton {

    func makeMultiLineSupport() {
        guard let titleLabel = titleLabel else {
            return
        }
        titleLabel.numberOfLines = 0
        titleLabel.setContentHuggingPriority(.required, for: .vertical)
        titleLabel.setContentHuggingPriority(.required, for: .horizontal)
        addConstraints([
            .init(item: titleLabel,
                  attribute: .top,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .top,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.top),
            .init(item: titleLabel,
                  attribute: .bottom,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .bottom,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.bottom),
            .init(item: titleLabel,
                  attribute: .left,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .left,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.left),
            .init(item: titleLabel,
                  attribute: .right,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .right,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.right)
            ])
    }

}

15voto

Nazrul Islam Punkte 703

In Xcode 9.3 können Sie dies mit dem Befehl Storyboard wie unten,

enter image description here

Sie müssen den Schaltflächentitel textAlignment auf center setzen

button.titleLabel?.textAlignment = .center

Sie müssen den Titeltext nicht mit einer neuen Zeile ( \n ) wie unten,

button.setTitle("Good\nAnswer",for: .normal)

Einfach Titel einstellen,

button.setTitle("Good Answer",for: .normal)

Hier ist das Ergebnis,

enter image description here

11voto

neoneye Punkte 47046

Links ausrichten auf iOS7 mit Autolayout:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentLeft;
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

11voto

Valerii Hiora Punkte 1522

Es gibt einen viel einfacheren Weg:

someButton.lineBreakMode = UILineBreakModeWordWrap;

(Bearbeitung für iOS 3 und später:)

someButton.titleLabel.lineBreakMode = UILineBreakModeWordWrap;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X