Регулируйте высоту UILabel в зависимости от текста

310
задан Serhii Mamontov 26 November 2015 в 09:31
поделиться

6 ответов

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;
407
ответ дан Adam Eberbach 23 November 2019 в 01:12
поделиться

Наконец, это работало. Парни спасибо.

я не заставлял его работать, потому что я пытался изменить размеры маркировки в heightForRowAtIndexPath метод:

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

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
1
ответ дан pablasso 23 November 2019 в 01:12
поделиться

Спасибо за это сообщение. Это помогло мне много. В моем случае я также редактирую текст в отдельном контроллере представления. Я заметил это, когда я использую:

[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
ответ дан Tim Stephenson 23 November 2019 в 01:12
поделиться

Можно реализовать 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 sizeWithFont:constrainedToSize:lineBreakMode: метод для вычисления высоты текста.

6
ответ дан klefevre 23 November 2019 в 01:12
поделиться

Одна строка: ответ Криса неверен.

newFrame.size.height = maximumLabelSize.height;

должно быть

newFrame.size.height = expectedLabelSize.height;

В остальном это правильное решение.

1
ответ дан 23 November 2019 в 01:12
поделиться

Вы двигались в правильном направлении. Все, что вам нужно сделать, это:

myUILabel.numberOfLines = 0;
myUILabel.text = @"Enter large amount of text here";
[myUILabel sizeToFit];
239
ответ дан 23 November 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: