Как настроить и сделать ширину UILabel в соответствии с размером текста?
В моем проекте есть UILabel
с текстом. Размер шрифта - 16pt. Содержимое текста изменяется в зависимости от разных случаев. Я надеюсь, что он может автоматически регулировать ширину UILabel
, чтобы соответствовать полной ширине текстов без растягивания.
Возможно ли это?
Ответы
Ответ 1
Предполагается, что вы уже установили шрифт:
label.text = @"some text";
[label sizeToFit];
Вам также необходимо определить максимальную ширину и сообщить вашей программе, что делать, если sizeToFit дает вам ширину больше этого максимума.
Ответ 2
Здесь, как это сделать, предположим, что следующая messageLabel
- это метка, для которой вы хотите получить желаемый эффект. Теперь попробуйте простую строку кодов:
// Set width constraint for label; it actually the width of your UILabel
CGFloat constrainedWidth = 240.0f;
// Calculate space for the specified string
CGSize sizeOfText = [yourText sizeWithFont:yourFont constrainedToSize:CGSizeMake(constrainedWidth, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];
UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(20,20,constrainedWidth,sizeOfText.height)];
messageLabel.text = yourText;
messageLabel.numberOfLines = 0;// This will make the label multiline
Ответ 3
NSString *[email protected]"I am here.";
CGSize stringsize1 = [txt1 sizeWithFont:[UIFont systemFontOfSize:14]];
[label setFrame:CGRectMake(x,y,stringsize1.width,hieght)];
[label setText:txt1];
Ответ 4
Здесь я вижу три варианта.
Во-первых, сделайте размер ярлыка достаточно большим, чтобы сохранить любой текст. Это самое простое, но не всегда хорошо работает - зависит от его окружающих представлений.
Во-вторых, Label может адаптировать размер шрифта для более длительного текста (свойство adjustsFontSizeToFitWidth
). Это часто нежелательно, разные шрифты в элементах могут выглядеть уродливыми.
Последний вариант заключается в программном изменении размера метки в соответствии с ее текущим текстом. Чтобы вычислить размер, необходимый для хранения текста с текущим шрифтом, используйте примерно следующее:
CGSize textSize = [[someLabel text] sizeWithFont:[someLabel font] forWidth:someLabel.bounds.size.width lineBreakMode:UILineBreakModeWordWrap];
Ответ 5
Если вы уже установили свой шрифт и его размер, и если у вас есть определенный фрейм, попробуйте использовать следующие для этих двух общих условий:
if (label.text.length > maxCharPerLine) [label setNumberOfLines:0]; // infinite lines
else [label setNumberOfLines:1]; // one line only
// Adjust your font size to fit your desired width.
[label setAdjustsFontSizeToFitWidth:YES];
Ответ 6
Следуйте этому.
CGSize stringsize = [yourString sizeWithFont:[UIFont systemFontOfSize:fontSize]];
[label setFrame:CGRectMake(x,y,stringsize.width,height)];
[label setText: yourString];
Ответ 7
Поскольку размерWithFont обесценивается в IOS 7.0, то вы ниже кода
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
if (SYSTEM_VERSION_LESS_THAN(@"7.0")) {
// code here for iOS 5.0,6.0 and so on
CGSize fontSize = [itemCat_text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:12]];
} else {
// code here for iOS 7.0
fontSize = [itemCat_text sizeWithAttributes:
@{NSFontAttributeName:
[UIFont fontWithName:@"Helvetica" size:12]}];
}
Ответ 8
Использование автоматической разметки:
![enter image description here]()
В ViewController:
override func viewDidLoad() {
super.viewDidLoad()
sampleLabel.text = "Electrical Maintenance and Repair"
sampleLabel.sizeToFit()
}