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?

7voto

Rog Punkte 16916

Zunächst einmal sollten Sie sich bewusst sein, dass UIButton bereits ein UILabel in sich trägt. Sie können es mit –setTitle:forState: .

Das Problem mit Ihrem Beispiel ist, dass Sie die UILabel's setzen müssen numberOfLines Eigenschaft auf einen anderen Wert als den Standardwert 1 setzen. lineBreakMode Eigentum.

6voto

Bill Chan Punkte 2743

Um den Abstand des Titellabels zur Schaltfläche festzulegen, setzen Sie titleEdgeInsets und andere Eigenschaften antes de setTitle:

    let button = UIButton()
    button.titleLabel?.lineBreakMode = .byWordWrapping
    button.titleLabel?.numberOfLines = 0
    button.titleEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 20, right: 20)
    button.setTitle("Dummy button with long long long long long long long long title", for: .normal)

P.S. Ich habe getestet, dass die Einstellung titleLabel?.textAlignment nicht notwendig ist und der Titel sich in .natural .

6voto

Manikandan Punkte 1099

Swift 5 , Für mehrzeiligen Text in UIButton

  let button = UIButton()
  button.titleLabel?.lineBreakMode = .byWordWrapping
  button.titleLabel?.textAlignment = .center
  button.titleLabel?.numberOfLines = 0 // for Multi line text

4voto

Jack Punkte 4814

Für diejenigen, die Xcode 4's Storyboard verwenden, können Sie auf die Schaltfläche klicken, und auf der rechten Seite Utilities Fenster unter Attribute Inspector, werden Sie eine Option für Zeilenumbruch zu sehen. Wählen Sie Word Wrap, und Sie sollten gut zu gehen.

4voto

user2338871 Punkte 59

Antworten hier sagen Ihnen, wie Sie mehrzeilige Schaltflächentitel programmatisch erreichen können.

Ich wollte nur hinzufügen, dass Sie bei der Verwendung von Storyboards mit der Tastenkombination [Strg+Enter] einen Zeilenumbruch in einem Schaltflächentitelfeld erzwingen können.

HTH

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