Несколько строк текста в UILabel - PullRequest
426 голосов
/ 13 июня 2009

Есть ли способ иметь несколько строк текста в UILabel, как в UITextView, или я должен использовать вместо него вторую?

Ответы [ 26 ]

1 голос
/ 25 сентября 2018

Swift 4:

label.lineBreakMode = .byWordWrapping

label.numberOfLines = 0

label.translatesAutoresizingMaskIntoConstraints = false

label.preferredMaxLayoutWidth = superview.bounds.size.width - 10 
1 голос
/ 31 мая 2014

Уже ответил, но вы также можете сделать это вручную в раскадровке. В Инспекторе атрибутов для метки можно изменить разрывы строк на перенос слов (или перенос символов).

1 голос
/ 17 января 2017

Установить ниже либо в коде, либо в самой раскадровке

Label.lineBreakMode = NSLineBreakByWordWrapping; Label.numberOfLines = 0;

и, пожалуйста, не забудьте установить ограничения для меток влево, вправо, сверху и снизу, иначе это не сработает.

1 голос
/ 05 декабря 2014

В этой функции передайте строку, которую вы хотите назначить в метке и передайте размер шрифта вместо self.activityFont и передайте ширину метки вместо 235, теперь вы получите высоту метки в соответствии с вашей строкой. это будет работать нормально.

-(float)calculateLabelStringHeight:(NSString *)answer
{
    CGRect textRect = [answer boundingRectWithSize: CGSizeMake(235, 10000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.activityFont} context:nil];
    return textRect.size.height;

}
0 голосов
/ 17 мая 2018

На C # это работало для меня внутри UITableViewCell.

        UILabel myLabel = new UILabel();
        myLabel.Font = UIFont.SystemFontOfSize(16);
        myLabel.Lines = 0;
        myLabel.TextAlignment = UITextAlignment.Left;
        myLabel.LineBreakMode = UILineBreakMode.WordWrap;
        myLabel.MinimumScaleFactor = 1;
        myLabel.AdjustsFontSizeToFitWidth = true;

       myLabel.InvalidateIntrinsicContentSize();
       myLabel.Frame = new CoreGraphics.CGRect(20, mycell.ContentView.Frame.Y + 20, cell.ContentView.Frame.Size.Width - 40, mycell.ContentView.Frame.Size.Height);
       myCell.ContentView.AddSubview(myLabel);

Я думаю, что суть здесь в следующем: -

            myLabel.TextAlignment = UITextAlignment.Left;
            myLabel.LineBreakMode = UILineBreakMode.WordWrap;
            myLabel.MinimumScaleFactor = 1;
            myLabel.AdjustsFontSizeToFitWidth = true;
0 голосов
/ 22 января 2015

Этот код возвращает высоту размера в соответствии с текстом

+ (CGFloat)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font
 {
    CGFloat result = font.pointSize+4;
    if (text) 
{
        CGSize size;

        CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, 999)
                                          options:NSStringDrawingUsesLineFragmentOrigin
                                       attributes:@{NSFontAttributeName:font}
                                          context:nil];
        size = CGSizeMake(frame.size.width, frame.size.height+1);
        result = MAX(size.height, result); //At least one row
    }
    return result;
}
...