Текст этикетки UIButton обрезается
У меня есть UIButton, встроенный в Interface Builder, который имеет метку по умолчанию. В Xcode я меняю текст ярлыка так:
myButton.titleLabel.text = @"this is the new label";
Однако, когда текст обновляется, новая строка обрезается до того же размера, что и исходная строка, и выглядит следующим образом:
this...label
Кто-нибудь знает, почему это происходит?
Ответы
Ответ 1
Вы должны использовать setTitle: forState:, чтобы изменить заголовок UIButton
. Если вы сами измените название, кнопка не имеет указаний на необходимость изменения размера этикетки - вам придется сделать что-то вроде этого:
myButton.titleLabel.text = @"this is the new label";
[myButton setNeedsLayout];
но я даже не уверен, что это будет работать во всех случаях. Способы, подобные setTitle:forState:
, предоставляются таким образом, что вы можете предоставить заголовки для нескольких состояний без необходимости вручную обновлять кнопку, и чтобы кнопка знала, что она должна быть выложена с новым заголовком.
Ответ 2
Попробуйте использовать метод setTitle кнопки (вместо установки заголовка непосредственно на ярлыке). Это должно привести к изменению размера метки заголовка.
Цель C:
[myButton setTitle:@"This is the text" forState:UIControlStateNormal];
Или в Swift:
myButton.setTitle("This is the text", for: .normal)
Ответ 3
Альтернативное решение - позволить UIBabton UIBabton сжать размер шрифта, как это делает UILabels:
button.titlelabel.minimumFontSize = 8.0; // or some more adequate size
self.buttonWithLongTitle.titleLabel.adjustsFontSizeToFitWidth = YES;
Ответ 4
Вызовите sizeToFit
на своей кнопке. Это изменит размер кнопки, чтобы она соответствовала тексту.
Ответ 5
Если это не сработало, вы всегда можете определить размер строки и отрегулировать ширину рамки кнопки. В этом случае вы уверены, что он подойдет.
// 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 frame width
Ответ 6
Solution in Swift 4.2
yourButton.titleLabel?.minimumScaleFactor = 0.5 //set whatever you want here to scale
yourButton.titleLabel?.adjustsFontSizeToFitWidth = true
Solution for Objective C
[yourButton.titleLabel setMinimumScaleFactor:0.5];
[yourButton.titleLabel setAdjustsFontSizeToFitWidth:YES];