Відрегулюйте висоту UILabel залежно від тексту


315

Подумайте, у мене є такий текст UILabel(довгий рядок динамічного тексту):

Оскільки чужа армія значно переважає команду, гравці повинні використовувати пост-апокаліптичний світ на свою користь, наприклад, шукати прикриття за сміттєвими контейнерами, стовпами, машинами, щебенем та іншими предметами.

Я хочу змінити розмір UILabel'sвисоти, щоб текст міг вміститися. Я використовую наступні властивості, UILabelщоб зробити текст всередині загортання.

myUILabel.lineBreakMode = UILineBreakModeWordWrap;
myUILabel.numberOfLines = 0;

Будь ласка, дайте мені знати, якщо я не рухаюсь у правильному напрямку. Дякую.



Swift версія внизу: stackoverflow.com/a/33945342/1634890
Хуан Boero

Відповіді:


409

sizeWithFont constrainedToSize:lineBreakMode:є методом використання. Приклад того, як його використовувати, наведено нижче:

//Calculate the expected size based on the font and linebreak mode of your label
// FLT_MAX here simply means no constraint in height
CGSize maximumLabelSize = CGSizeMake(296, FLT_MAX);

CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode];   

//adjust the label the the new height.
CGRect newFrame = yourLabel.frame;
newFrame.size.height = expectedLabelSize.height;
yourLabel.frame = newFrame;

Тут використовується 9999, як би ви зробили це гнучким до тексту?
квантовапотама

1
@quantumpotato 9999 - це лише місце, де розміщено максимальний простір тексту. Ви можете використовувати будь-яке число, яке працює для вашого інтерфейсу.
PyjamaSam

9
Якщо ви розміряєте розмітки міток таким чином, ви робите це неправильно . Ви повинні використовувати [label sizeToFit].
Marián Černý

5
Не забувайте , що sizeWithFontзасуджується в прошивці 7. stackoverflow.com/questions/18897896 / ...
attomos

7
Його застаріле;
msmq

242

Ви йшли у правильному напрямку. Все, що вам потрібно зробити, це:

myUILabel.numberOfLines = 0;
myUILabel.text = @"Enter large amount of text here";
[myUILabel sizeToFit];

5
Розмір, який підходив, був саме те, що мені потрібно, щоб текст обернути, довго з myUILabel.lineBreakMode = UILineBreakModeWordWrap; myUILabel.numberOfLines = 0;
Джек БеНімбл

2
Набагато простіше рішення, ніж відповідь, позначена як правильна і працює так само добре.
пам’ятки

4
@Inder Kumar Rathore - я використовую це для декількох рядків, весь час, звідси числоOfLines = 0; Здається, спочатку не вистачає заданої ширини, але я припустив, що це вже було зроблено з ініціалом UILabel.
DonnaLea

@Donna .. Мені не подобається .. ти говориш про його кадр ??
Inder Kumar Rathore

@DonnaLea, дуже дякую ваш простий підхід до рішення допоміг і мені вирішити свою проблему.
Naved

44

В IOS 6 Apple , додав властивість UILabel , що значно спрощує динамічна зміна розмірів по вертикалі міток: preferredMaxLayoutWidth .

Використання цього властивості в поєднанні з методом lineBreakMode = NSLineBreakByWordWrapping та sizeToFit дозволяє легко змінити розмір екземпляра UILabel до висоти, що вміщує весь текст.

Цитата з документації на iOS:

preferenceMaxLayoutWidth Переважна максимальна ширина (у балах) для багаторядкової мітки.

Обговорення Ця властивість впливає на розмір мітки, коли до неї застосовуються обмеження макета. Під час компонування, якщо текст виходить за межі ширини, визначеної цією властивістю, додатковий текст переноситься в один або кілька нових рядків, збільшуючи тим самим висоту мітки.

Зразок:

...
UILabel *status = [[UILabel alloc] init];
status.lineBreakMode = NSLineBreakByWordWrapping;
status.numberOfLines = 5; // limits to 5 lines; use 0 for unlimited.

[self addSubview:status]; // self here is the parent view

status.preferredMaxLayoutWidth = self.frame.size.width; // assumes the parent view has its frame already set.

status.text = @"Some quite lengthy message may go here…";
[status sizeToFit];
[status setNeedsDisplay];
...

39

Перевірте цю роботу чудово, не додаючи єдиний рядок коду. (Використання автоматичного вимикання)

Я зробив демонстрацію для вас відповідно до ваших вимог. Завантажте його за посиланням нижче,

Автоматизуйте UIView та UILabel

Покрокове керівництво: -

Крок 1: - Встановіть обмеження на UIView

1) Ведучі 2) Топ 3) Послідовні (З основного перегляду)

введіть тут опис зображення

Крок 2: - Встановіть обмеження на мітку 1

1) Ведуча 2) Топ 3) Трейлінг (З його нагляду)

введіть тут опис зображення

Крок 3: - Встановіть обмеження на позначку 2

1) Ведучий 2) Послідовний (З його нагляду)

введіть тут опис зображення

Крок 4: - Найбільш складно дають боттон UILabel від UIView.

введіть тут опис зображення

Крок 5: - (Необов’язково) Встановити обмеження на UIButton

1) Провідна 2) Знизу 3) Зворотна 4) Фіксована висота (З основного виду)

введіть тут опис зображення

Вихід: -

введіть тут опис зображення

Примітка: - Переконайтеся, що ви встановили Кількість рядків = 0 у властивості Label.

введіть тут опис зображення

Сподіваюсь, цієї інформації достатньо, щоб зрозуміти функцію автоматичного розміру UIView відповідно до висоти UILabel та автоматичного розміру UILabel відповідно до тексту.


А що, якби ви хотіли, щоб під переглядом білого тла також було кілька поглядів? Якщо йому не буде надано висоти, в СБ з’являться червоні лінії для "Потрібні обмеження для: положення Y або висоти"
Богдан Разван

це потрібно позначити як правильну відповідь. Це правильний шлях із ib.
Рана Таллал

@ SPQR3 в чому проблема? це допомогло багатьом людям та добре працювала.
Бадал Шах

36

Замість цього робити це програмно, ви можете робити це в Storyboard / XIB під час проектування.

  • Встановіть кількість властивостей UIlabel у 0 інспектора атрибутів на 0 .
  • Потім встановіть обмеження по ширині / (або) провідні та кінцеві обмеження відповідно до вимоги.
  • Потім встановіть обмеження по висоті з мінімальним значенням . Нарешті вибрати обмеження висоти ви додали і в інспектора розміру один поруч атрибути інспектора змінити в обмеженні висоти в залежності від одно - більше , ніж .

Цей працює для UILabel, вбудованого у спеціальну коробку xib у UITableView.
Gang Fang

Відповідно до вашої відповіді, я встановив постійну висоту для моєї мітки та встановив цей пріоритет на низький (250), а помилки зникнуть. (Не потрібно встановлювати рівне - більше)
Хамід Реза Ансарі

15

Дякую, хлопці за допомогу, ось код, який я спробував, який працює для мене

   UILabel *instructions = [[UILabel alloc]initWithFrame:CGRectMake(10, 225, 300, 180)];
   NSString *text = @"First take clear picture and then try to zoom in to fit the ";
   instructions.text = text;
   instructions.textAlignment = UITextAlignmentCenter;
   instructions.lineBreakMode = NSLineBreakByWordWrapping;
   [instructions setTextColor:[UIColor grayColor]];

   CGSize expectedLabelSize = [text sizeWithFont:instructions.font 
                                constrainedToSize:instructions.frame.size
                                    lineBreakMode:UILineBreakModeWordWrap];

    CGRect newFrame = instructions.frame;
    newFrame.size.height = expectedLabelSize.height;
    instructions.frame = newFrame;
    instructions.numberOfLines = 0;
    [instructions sizeToFit];
    [self addSubview:instructions];

2
sizeWithFont застарілий.
msmq

12

Рішення для iOS7 раніше та iOS7 вище

//
//  UILabel+DynamicHeight.m
//  For StackOverFlow
//
//  Created by Vijay on 24/02/14.
//  Copyright (c) 2014 http://Vijay-Apple-Dev.blogspot.com. All rights reserved.
//

#import <UIKit/UIKit.h>

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

#define iOS7_0 @"7.0"

@interface UILabel (DynamicHeight)

/*====================================================================*/

/* Calculate the size,bounds,frame of the Multi line Label */

/*====================================================================*/
/**
 *  Returns the size of the Label
 *
 *  @param aLabel To be used to calculte the height
 *
 *  @return size of the Label
 */

-(CGSize)sizeOfMultiLineLabel;

@end


//
//  UILabel+DynamicHeight.m
//  For StackOverFlow
//
//  Created by Vijay on 24/02/14.
//  Copyright (c) 2014 http://Vijay-Apple-Dev.blogspot.com. All rights reserved.
//

#import "UILabel+DynamicHeight.h"

@implementation UILabel (DynamicHeight)
/*====================================================================*/

/* Calculate the size,bounds,frame of the Multi line Label */

/*====================================================================*/
/**
 *  Returns the size of the Label
 *
 *  @param aLabel To be used to calculte the height
 *
 *  @return size of the Label
 */
-(CGSize)sizeOfMultiLineLabel{

    NSAssert(self, @"UILabel was nil");

    //Label text
    NSString *aLabelTextString = [self text];

    //Label font
    UIFont *aLabelFont = [self font];

    //Width of the Label
    CGFloat aLabelSizeWidth = self.frame.size.width;


    if (SYSTEM_VERSION_LESS_THAN(iOS7_0)) {
        //version < 7.0

        return [aLabelTextString sizeWithFont:aLabelFont
                            constrainedToSize:CGSizeMake(aLabelSizeWidth, MAXFLOAT)
                                lineBreakMode:NSLineBreakByWordWrapping];
    }
    else if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(iOS7_0)) {
        //version >= 7.0

        //Return the calculated size of the Label
        return [aLabelTextString boundingRectWithSize:CGSizeMake(aLabelSizeWidth, MAXFLOAT)
                                              options:NSStringDrawingUsesLineFragmentOrigin
                                           attributes:@{
                                                        NSFontAttributeName : aLabelFont
                                                        }
                                              context:nil].size;

    }

    return [self bounds].size;

}

@end

У підкласі UITableViewController, де я повинен викликати цей метод?
Хомам

Де потрібно обчислити висоту мітки, тоді зателефонуйте за цим методом. потім відрегулюйте висоту подання таблиці. де у вас є висота перегляду таблиці для рядка при індексному методі. обчислити всі тексти вертикальних міток за необхідністю
Vijay-Apple-Dev.blogspot.com

Vijay sizeWithFont вилучено.
користувач3182143

10

Оскільки sizeWithFont застарілий, я використовую його замість цього.

цей отримує специфічні атрибути мітки.

-(CGFloat)heightForLabel:(UILabel *)label withText:(NSString *)text{

    NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName:label.font}];
    CGRect rect = [attributedText boundingRectWithSize:(CGSize){label.frame.size.width, CGFLOAT_MAX}
                                           options:NSStringDrawingUsesLineFragmentOrigin
                                           context:nil];

    return ceil(rect.size.height);
}

6

Ось версія категорії:

UILabel + AutoSize.h # import

@interface UILabel (AutoSize)

- (void) autosizeForWidth: (int) width;

@end

UILabel + AutoSize.m

#import "UILabel+AutoSize.h"

@implementation UILabel (AutoSize)

- (void) autosizeForWidth: (int) width {
    self.lineBreakMode = UILineBreakModeWordWrap;
    self.numberOfLines = 0;
    CGSize maximumLabelSize = CGSizeMake(width, FLT_MAX);
    CGSize expectedLabelSize = [self.text sizeWithFont:self.font constrainedToSize:maximumLabelSize lineBreakMode:self.lineBreakMode];
    CGRect newFrame = self.frame;
    newFrame.size.height = expectedLabelSize.height;
    self.frame = newFrame;
}

@end

6

Ви можете реалізувати TableViewController's (UITableViewCell *)tableView:cellForRowAtIndexPath метод таким чином (наприклад):

#define CELL_LABEL_TAG 1

- (UITableViewCell *)tableView:(UITableView *)tableView  cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *text = @"my long text";

    static NSString *MyIdentifier = @"MyIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero  reuseIdentifier:identifier] autorelease];
    }

    CGFloat width = [UIScreen mainScreen].bounds.size.width - 50;
    CGFloat height = [self textHeight:text] + 10;
    CGRect frame = CGRectMake(10.0f, 10.0f, width, height);

    UILabel *cellLabel = [[UILabel alloc] initWithFrame:frame];
    cellLabel.tag = CELL_LABEL_TAG;
    cellLabel.textColor = [UIColor blackColor];
    cellLabel.backgroundColor = [UIColor clearColor];
    cellLabel.textAlignment = UITextAlignmentLeft;
    cellLabel.font = [UIFont systemFontOfSize:12.0f];
    [cell.contentView addSubview:cellLabel];
    [cellLabel release];

    return cell;
}

UILabel *label = (UILabel *)[cell viewWithTag:CELL_LABEL_TAG];
label.text = text;
label.numberOfLines = 0;
[label sizeToFit];
return cell;

Крім того, використання NSString«s sizeWithFont:constrainedToSize:lineBreakMode:методу обчислення висоти тексту.


6

Розширення UILabel на основі цієї відповіді для Swift 4 і вище

extension UILabel {

    func retrieveTextHeight () -> CGFloat {
        let attributedText = NSAttributedString(string: self.text!, attributes: [NSFontAttributeName:self.font])

        let rect = attributedText.boundingRect(with: CGSize(width: self.frame.size.width, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, context: nil)

        return ceil(rect.size.height)
    }

}

Можна використовувати так:

self.labelHeightConstraint.constant = self.label.retrieveTextHeight()

4

А для тих, хто переходить на iOS 8, ось розширення класу для Swift:

extension UILabel {

    func autoresize() {
        if let textNSString: NSString = self.text {
            let rect = textNSString.boundingRectWithSize(CGSizeMake(self.frame.size.width, CGFloat.max),
                options: NSStringDrawingOptions.UsesLineFragmentOrigin,
                attributes: [NSFontAttributeName: self.font],
                context: nil)
            self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, rect.height)
        }
    }

}

4

Найпростіший і кращий спосіб, який працював для мене, - застосувати обмеження висоти до мітки та встановити пріоритет на низькому , тобто (250) у раскадровці.

Тож вам не потрібно хвилюватися щодо розрахунку висоти та ширини програмно, завдяки розкадровці.


4

Мій підхід до обчислення динамічної висоти UILabel.

    let width = ... //< width of this label 
    let text = ... //< display content

    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping
    label.preferredMaxLayoutWidth = width

    // Font of this label.
    //label.font = UIFont.systemFont(ofSize: 17.0)
    // Compute intrinsicContentSize based on font, and preferredMaxLayoutWidth
    label.invalidateIntrinsicContentSize() 
    // Destination height
    let height = label.intrinsicContentSize.height

Оберіть функцію:

func computeHeight(text: String, width: CGFloat) -> CGFloat {
    // A dummy label in order to compute dynamic height.
    let label = UILabel()

    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping
    label.font = UIFont.systemFont(ofSize: 17.0)

    label.preferredMaxLayoutWidth = width
    label.text = text
    label.invalidateIntrinsicContentSize()

    let height = label.intrinsicContentSize.height
    return height
}

3

Оновлений метод

+ (CGFloat)heightForText:(NSString*)text font:(UIFont*)font withinWidth:(CGFloat)width {

    CGSize constraint = CGSizeMake(width, 20000.0f);
    CGSize size;

    CGSize boundingBox = [text boundingRectWithSize:constraint
                                                  options:NSStringDrawingUsesLineFragmentOrigin
                                               attributes:@{NSFontAttributeName:font}
                                                  context:nil].size;

    size = CGSizeMake(ceil(boundingBox.width), ceil(boundingBox.height));

    return size.height;
}

3

Це один рядок коду для отримання висоти UILabel за допомогою Objective-c:

labelObj.numberOfLines = 0;
CGSize neededSize = [labelObj sizeThatFits:CGSizeMake(screenWidth, CGFLOAT_MAX)];

та використовуючи .height, ви отримаєте висоту мітки наступним чином:

neededSize.height

Найкраща поточна відповідь.
Майк

3

Ви можете отримати висоту, використовуючи код нижче

Ви повинні пройти

  1. текст 2. шрифт 3. ширина мітки

    func heightForLabel(text: String, font: UIFont, width: CGFloat) -> CGFloat {
    
       let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude))
       label.numberOfLines = 0
       label.lineBreakMode = NSLineBreakMode.byWordWrapping
       label.font = font
       label.text = text
       label.sizeToFit()
    
       return label.frame.height
    }

2

Дякую за цю публікацію Це мені дуже допомогло. У моєму випадку я також редагую текст в окремому контролері перегляду. Я помітив, що коли я використовую:

[cell.contentView addSubview:cellLabel];

у tableView: cellForRowAtIndexPath: метод, за допомогою якого перегляд міток постійно відображався у верхній частині попереднього представлення кожного разу, коли я редагував комірку. Текст став піксельним, і коли щось було видалено або змінено, попередня версія була помітна під новою версією. Ось як я вирішив проблему:

if ([[cell.contentView subviews] count] > 0) {
    UIView *test = [[cell.contentView subviews] objectAtIndex:0];
    [test removeFromSuperview];
}
[cell.contentView insertSubview:cellLabel atIndex:0];

Більше не дивного шарування. Якщо є кращий спосіб вирішити це, будь ласка, дайте мені знати.


2
UILabel *itemTitle = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 10,100, 200.0f)];
itemTitle.text = @"aseruy56uiytitfesh";
itemTitle.adjustsFontSizeToFitWidth = NO;
itemTitle.autoresizingMask = UIViewAutoresizingFlexibleWidth;
itemTitle.font = [UIFont boldSystemFontOfSize:18.0];
itemTitle.textColor = [UIColor blackColor];
itemTitle.shadowColor = [UIColor whiteColor];
itemTitle.shadowOffset = CGSizeMake(0, 1);
itemTitle.backgroundColor = [UIColor blueColor];
itemTitle.lineBreakMode = UILineBreakModeWordWrap;
itemTitle.numberOfLines = 0;
[itemTitle sizeToFit];
[self.view addSubview:itemTitle];

використовуйте тут всі властивості, які використовуються на етикетці, і протестуйте її, збільшивши текст у itemTitle.text як

itemTitle.text = @"diofgorigjveghnhkvjteinughntivugenvitugnvkejrfgnvkhv";

він покаже відповідь perfetc, як вам потрібно


2

Ви також можете використовувати його як метод. @Pyjamasam дуже правда, тому я просто роблю його метод. Це може бути корисним для когось іншого

-(CGRect)setDynamicHeightForLabel:(UILabel*)_lbl andMaxWidth:(float)_width{
    CGSize maximumLabelSize = CGSizeMake(_width, FLT_MAX);

    CGSize expectedLabelSize = [_lbl.text sizeWithFont:_lbl.font constrainedToSize:maximumLabelSize lineBreakMode:_lbl.lineBreakMode];

    //adjust the label the the new height.
    CGRect newFrame = _lbl.frame;
    newFrame.size.height = expectedLabelSize.height;
    return newFrame;
}

і просто встановити так

label.frame = [self setDynamicHeightForLabel:label andMaxWidth:300.0];

2

Для цього в Swift3 код:

 let labelSizeWithFixedWith = CGSize(width: 300, height: CGFloat.greatestFiniteMagnitude)
            let exactLabelsize = self.label.sizeThatFits(labelSizeWithFixedWith)
            self.label.frame = CGRect(origin: CGPoint(x: 20, y: 20), size: exactLabelsize)

2

Додавання до вищезазначених відповідей:

Це легко досягти за допомогою раскадровки.

  1. Встановити обмеження для UILabel. (У моєму випадку я робив верхню, ліву та фіксовану ширину)
  2. В Інспекторі атрибутів встановіть число рядка 0
  3. Встановіть перерву лінії на WordWrap в інспекторі атрибутів.

Регулювання висоти UILabel


1

Один рядок - відповідь Кріса неправильна.

newFrame.size.height = maximumLabelSize.height;

має бути

newFrame.size.height = expectedLabelSize.height;

Крім цього, це правильне рішення.


1

Нарешті, це спрацювало. Дякую, хлопці

Я не працював над тим, що я намагався змінити розмір мітки heightForRowAtIndexPathметодом:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

і (так нерозумно мені), я змінив розмір мітки до замовчування в cellForRowAtIndexPathметоді - я не помічав код, який я писав раніше:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

1
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    cellIdentifier = @"myCell";
    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    cell.myUILabel.lineBreakMode = UILineBreakModeWordWrap;        
    cell.myUILabel.numberOfLines = 0;
    cell.myUILabel.text = @"Some very very very very long text....."
    [cell.myUILabel.criterionDescriptionLabel sizeToFit];    
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
    CGFloat rowHeight = cell.myUILabel.frame.size.height + 10;

    return rowHeight;    
}

2
Чи можете ви додати трохи пояснень, як ваше рішення вирішує питання ОП?

1
ви не можете запитати UITableViewCell * cell = [self tableView: tableView cellForRowAtIndexPath: indexPath]; in heightForRowAtIndexPath, ви будете ге та нескінченна петля
Пітер Лапісу

1
NSString *str = @"Please enter your text......";
CGSize lblSize = [str sizeWithFont:[UIFont systemFontOfSize:15] constrainedToSize: CGSizeMake(200.0f, 600.0f) lineBreakMode: NSLineBreakByWordWrapping];

UILabel *label = [[UILabel alloc]init];
label.frame = CGRectMake(60, 20, 200, lblSize.height);
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
label.font = [UIFont systemFontOfSize:15];
label.text = str;
label.backgroundColor = [UIColor clearColor];
[label sizeToFit];
[self.view addSubview:label];

1

Мій код:

UILabel *label      = [[UILabel alloc] init];
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
label.text          = text;
label.textAlignment = NSTextAlignmentCenter;
label.font          = [UIFont fontWithName:_bodyTextFontFamily size:_bodyFontSize];

CGSize size = [label sizeThatFits:CGSizeMake(width, MAXFLOAT)];


float height        = size.height;
label.frame         = CGRectMake(x, y, width, height);

1

Цей спосіб дасть ідеальний зріст

-(float) getHeightForText:(NSString*) text withFont:(UIFont*) font andWidth:(float) width{
CGSize constraint = CGSizeMake(width , 20000.0f);
CGSize title_size;
float totalHeight;


title_size = [text boundingRectWithSize:constraint
                                options:NSStringDrawingUsesLineFragmentOrigin
                             attributes:@{ NSFontAttributeName : font }
                                context:nil].size;

totalHeight = ceil(title_size.height);

CGFloat height = MAX(totalHeight, 40.0f);
return height;
}

Не копіюйте вміст з іншого місця без чіткої атрибуції. Це сприймається як плагіат. Див. Stackoverflow.com/help/referencing ( stackoverflow.com/a/25158206/444991 ).
Метт

1

Швидкий 2:

    yourLabel.text = "your very long text"
    yourLabel.numberOfLines = 0
    yourLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
    yourLabel.frame.size.width = 200
    yourLabel.frame.size.height = CGFloat(MAXFLOAT)
    yourLabel.sizeToFit()

Цікаві лінії sizeToFit()поєднуються із встановленням aframe.size.height максимального поплавця, це дасть можливість довгому тексту, але sizeToFit()змусить його використовувати лише необхідне, але ЗАВЖДИ зателефонуйте після встановлення параметра.frame.size.height .

Я рекомендую встановити параметр .backgroundColorдля налагодження, таким чином ви можете бачити кадр, що відображається для кожного випадку.


1
yourLabel.frame.height- це лише власність
Філ Хадсон

2
yourLabel.frame.size.width і yourLabel.frame.size.height також читаються також
CalZone

1
myLabel.text = "your very long text"
myLabel.numberOfLines = 0
myLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping

Будь ласка, встановіть обмеження для UILable у рекламній дошці, включаючи верхній лівий нижній правий

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.