Ausgabe
Ich füge programmgesteuert UIButton
Objekte zu einer UIScrollView
. Als Ergebnis erhalte ich, dass die Höhe des Buttons korrekt berechnet wird, dh es gibt Platz für eine zweite Zeile, aber der Text wird nicht umgebrochen, sondern fließt weiter, als ob der Button unendlich breit wäre. Früher hatte ich UITextView
Objekte anstelle der Schaltflächen, und das funktionierte einwandfrei. Ich kann die Schaltflächen einfach nicht so gestalten, wie es die Textansichten getan haben.
Hier ist ein Code-Schnipsel:
UIButton* sButton = [[UIButton alloc] initWithFrame:CGRectMake(0, yPos, sWidth - 5, height)];
sText = [[NSMutableString alloc] initWithString:@"quite a long string that does not fit in one line, no chance"];
sButton.titleLabel.font = font;
sButton.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
[sButton setLineBreakMode:NSLineBreakByWordWrapping];
[sButton.titleLabel setLineBreakMode:NSLineBreakByWordWrapping];
[sButton setTitle:sText forState:UIControlStateNormal];
[sButton sizeToFit];
Und das ist das Ergebnis, das ich bekomme:
Wie kann ich den Schaltflächentext umbrechen lassen?
Lösung
Dies ist die einzige Lösung, die ich gefunden habe und die funktioniert: https://stackoverflow.com/a/4978003/963022
Am Ende habe ich eine benutzerdefinierte Schaltflächenimplementierung erstellt und überschrieben:
- (CGSize)sizeThatFits:(CGSize)size {
int diff = 0;
// for the width, subtract DIFF for the border
// for the height, use a large value that will be reduced when the size is returned from sizeWithFont
CGSize tempSize = CGSizeMake(size.width - diff, 1000);
CGSize stringSize = [self.titleLabel.text
sizeWithFont:self.titleLabel.font
constrainedToSize:tempSize
lineBreakMode:UILineBreakModeWordWrap];
return CGSizeMake(size.width - diff, stringSize.height);
}
Beantwortet von – Eir
Antwort geprüft von – Senaida (FixError Volunteer)