Я динамически создаю UILabel в своем приложении, чтобы отобразить список направлений для рецепта. Этикетки заполняют правильное отображение всех элементов один за другим.Динамическое добавление многострочной метки в виде
Проблема заключается в том, что текст переходит к следующей строке метки, она перекрывается следующей меткой.
Я установил numberOfLines в 0, а также установил lineBreakMode в NSLineBreakByWordWrapping. Это помогает ярлыку отображать текст на нескольких строках.
Я попытался отрегулировать высоту метки, как вы увидите в коде, но она не работает.
Как предотвратить перекрытие меток из-за многострочного текста в ярлыке?
Вот код для заполнения этикетки с мультилиниями:
//add all the directions to the uiview
for (int i = 0; i < self.recipe.directions.count; i++)
{
UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake(0,(i+1)*25,280,25)];
label.lineBreakMode = NSLineBreakByWordWrapping; //multiple lines in a label
label.numberOfLines = 0;
label.text =[NSString stringWithFormat: @"%@", self.recipe.directions[i]];
[label sizeToFit]; // resize the width and height to fit the text
NSLog(@"Actual height is: %f", label.frame.size.height); // Use this for spacing any further elements
CGSize expectedLabelSize = [label.text sizeWithFont:label.font
constrainedToSize:label.frame.size
lineBreakMode:NSLineBreakByWordWrapping];
//adjust the label the the new height.
CGRect newFrame = label.frame;
newFrame.size.height = expectedLabelSize.height;
label.frame = newFrame;
[self.directionsView addSubview:label];
}
Спасибо. Это работает. Но расстояние между текстами слишком велико. Как я могу уменьшить его ?. Кроме того, sizeWithFont устарел. Что можно использовать вместо этого? –
Решен вопрос о расстоянии. Просто инициализировано lastLabelBottomCoordinate = 25 –
Я только что отредактировал свой ответ. Для интервала между метками вы должны изменить интервал между переменными меток. Для устаревшего метода теперь вам нужно использовать 'boundingRectWithSize: options: attributes: context:' method – lucaslt89