2011-01-01 16 views
31

Ich habe eine UIButton in Interface Builder gebaut, die eine Standardbezeichnung hat. In Xcode Ich ändere den Beschriftungstext dynamisch wie so:UIButton Beschriftungstext wird abgeschnitten

myButton.titleLabel.text = @"this is the new label"; 

Wenn jedoch der Text-Updates wird die neue Zeichenfolge auf die gleiche Größe wie die ursprüngliche Zeichenfolge abgeschnitten abgesetzt wird und ende aussehen wie:

this...label 

Wer weiß, warum das passiert?

Antwort

56

Sie sollten setTitle:forState: verwenden, um den Titel eines UIButton zu ändern. Wenn Sie den Titel selbst zu ändern, hat die Taste keine Anzeichen dafür, dass sie das Etikett, um die Größe muss - würde man so etwas zu tun, am Ende mit:

myButton.titleLabel.text = @"this is the new label"; 
[myButton setNeedsLayout]; 

aber ich bin nicht einmal sicher, dass Arbeit in würde alle Fälle. Methoden wie setTitle:forState: werden zur Verfügung gestellt, so dass Sie Titel für mehrere Zustände bereitstellen können, ohne die Schaltfläche manuell aktualisieren zu müssen, und damit die Schaltfläche weiß, dass sie mit einem neuen Titel angelegt werden muss.

+1

Absolut. Der richtige Weg, um dynamische Schaltfläche Text Größe der Schaltfläche titleLabel Schaltfläche ist durch die setTitle: forState: –

5

Anruf sizeToFit auf Ihrem Knopf. Dies wird die Größe der Schaltfläche ändern, um den Text anzupassen.

1

Wenn das nicht funktioniert, können Sie immer die String-Größe bestimmen und die Breite des Buttons anpassen. In diesem Fall sind Sie sicher, dass es passt.

// Calculate the size 
CGSize buttonSize = [@"My text.." sizeWithFont:[UIFont systemFontOfSize:15.0] 
        constrainedToSize:someSize lineBreakMode:UILineBreakModeWordWrap]; 

// Do whatever you want with the "buttonSize", you can for example adjust your button's frame width 
18

Eine alternative Lösung ist die UIButton Innen UILabel lassen die Schriftgröße zu verkleinern, wie UILabels tun können:

button.titlelabel.minimumFontSize = 8.0; // or some more adequate size 
self.buttonWithLongTitle.titleLabel.adjustsFontSizeToFitWidth = YES; 
+0

das ist das einzige, was für mich funktioniert ... die Schaltfläche ist nicht gestreckt, aber zumindest können Sie den Text sehen –

+4

Hinweis: 'minimumFontSize' ist jetzt veraltet. Verwenden Sie stattdessen 'minimumScaleFactor'. I.e. Mit 'minimumScaleFactor = 1.0;' –

+0

ist das die richtige Antwort, insbesondere justsFontSizeToFitWidth ist die Methode, nach der das OP sucht. – Dado

22

Versuchen Sie, die setTitle Methode der Taste (anstatt Einstellung der Titel direkt auf die Etikette). Es sollte die Größe des Titeletiketts erzwingen.

Objective C:

[myButton setTitle:@"This is the text" forState:UIControlStateNormal]; 

Oder in Swift:

myButton.setTitle("This is the text", for: .normal) 
+0

+1 für die perfekte Antwort. Ich habe alle zwei oben genannten Alternativen ausprobiert. Aber außer dieser Antwort konnte ich mein Problem nicht lösen. –

+0

stattdessen die ausgewählte beste Antwort, diese funktionierte perfekt für mich! +1 –

+0

Zustimmen. Dieser sollte akzeptiert werden :) +1 –