Подтвердить что ты не робот

Текст этикетки UIButton обрезается

У меня есть UIButton, встроенный в Interface Builder, который имеет метку по умолчанию. В Xcode я меняю текст ярлыка так:

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

Однако, когда текст обновляется, новая строка обрезается до того же размера, что и исходная строка, и выглядит следующим образом:

this...label

Кто-нибудь знает, почему это происходит?

4b9b3361

Ответ 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];