Изменение размера UILabel для соответствия Word Wrap
Это часть приложения для iPhone, но в целом должна применяться к Какао, написанному на objC.
У меня есть UILabel, содержащая различное количество текста (от отдельных символов до нескольких предложений). Текст всегда должен отображаться как можно большим шрифтом, который соответствует всему тексту в UILabel. Максимальное количество строк установлено на 4, а режим разрыва строки установлен на перенос слов.
Так как используется несколько строк, AdjusttsFontSizeToFitWidth не будет работать для изменения размера текста.
Таким образом, я использую цикл для определения максимально возможного размера шрифта для каждой строки как таковой:
//Set the text
self.textLabel.text = text;
//Largest size used
NSInteger fsize = 200; textLabel.font = [UIFont
fontWithName:@"Verdana-Bold"
size:fsize];
//Calculate size of the rendered string with the current parameters
float height = [text sizeWithFont:textLabel.font
constrainedToSize:CGSizeMake(textLabel.bounds.size.width,99999)
lineBreakMode:UILineBreakModeWordWrap].height;
//Reduce font size by 5 while too large, break if no height (empty string)
while (height > textLabel.bounds.size.height and height != 0) {
fsize -= 5;
textLabel.font = [UIFont fontWithName:@"Verdana-Bold" size:fsize];
height = [text sizeWithFont:textLabel.font
constrainedToSize:CGSizeMake(textLabel.bounds.size.width,99999)
lineBreakMode:UILineBreakModeWordWrap].height;
};
Этот подход хорошо работает по большей части. Исключение составляют длинные слова. Давайте возьмем строку @ "Опыт Foo." В качестве примера. Слово «опыт», будучи намного длиннее других, будет разбито пополам без правильной переноса слов, а строка разделена на 4 строки. Я ищу способ уменьшить размер так, чтобы каждое отдельное слово помещалось в одну строку.
Пример:
-old-
Размер шрифта: 60
The
Exper
ience
foo
должно быть
-new-
Размер шрифта: 30
The
Experience
foo
Вероятно, есть простой способ сделать это, но я бью стену.