Минимальная высота ячейки с UITableViewAutomaticDimension

Можно ли установить минимальную высоту для ячейки? Я использую динамический:

tableView.estimatedRowHeight = 83.0
tableView.rowHeight = UITableViewAutomaticDimension

Но мне нужно установить минимальную высоту для ячейки, когда мой news title label text находится в одной строке.


person aaisataev    schedule 03.02.2016    source источник


Ответы (6)


Пробовали ли вы создать ограничение в пользовательском представлении UITableViewCell для height >= 60.0?

person Hytek    schedule 03.02.2016
comment
как именно вы ее решили? Вы можете дать некоторые инструкции? - person Hlung; 20.05.2016
comment
Перетащите View поверх UITableViewCell и установите ограничения Leading, Trailing, Top и Bottom равными 0. Установите ограничение высоты как ›= ExpectedMinimumSize. - person YSR fan; 04.01.2017
comment
Вы можете сделать это без дополнительного View. Если у вас есть большое изображение и текст, просто установите для изображения bottomConstraints значение ›= x - person DoruChidean; 27.06.2018

Понятно. Заставил это работать, как показано ниже.

Перетащите представление поверх UITableViewCell и установите ограничения Leading, Trailing, Top и Bottom как 0. Установите ограничение высоты как >= ExpectedMinimumSize.

В методе делегата heightForRowAtIndexPath:

-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    return UITableViewAutomaticDimension;
}

В ViewDidLoad:

self.tableView.estimatedRowHeight = 60; // required value.
person YSR fan    schedule 04.01.2017
comment
У меня также работало в Swift 3: func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return UITableViewAutomaticDimension; } In ViewDidLoad: self.tableView.estimatedRowHeight = 60 - person MrAn3; 25.05.2017
comment
Я не могу заставить это работать. В моей ячейке есть метка и переключатель, оба центрированы по вертикали относительно супервизора, без вертикальных полей. Во время выполнения высота ячейки указывается как 44.6667, хотя я указал оценочную высоту 60 (как в этом ответе). Это работает, если я добавляю верхние/нижние поля к метке или переключателю, но мне пришлось бы вычислять их, чтобы получить около 60, и это выглядит неэлегантно... - person Nicolas Miari; 16.02.2018

Есть трюк, на который отвечает @Hytek. Для этого вы должны указать ограничение на минимальную высоту.

Например: если в вашей ячейке таблицы есть один UILabel, и вы хотите, чтобы UILabel увеличивал высоту в соответствии с динамическим содержимым. И у вас есть код, как показано ниже.

tableView.estimatedRowHeight = 83.0
tableView.rowHeight = UITableViewAutomaticDimension

Это увеличит высоту вашей метки, когда контент больше, но также уменьшит, когда ваш контент мал. Поэтому, если вы ожидаете, что метка должна иметь минимальную высоту, вы должны указать ограничение высоты для вашего UILabel таким образом, чтобы height >= 30.0 было для вашей метки.

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

Таким образом, ваш UILabel не уменьшится в высоту меньше, чем 30.0.

person Bhavin_m    schedule 03.07.2018

В коде автоматического макета пользовательской ячейки (с помощью Interface Builder или программно) добавьте соответствующие ограничения.

Например. (Программно в пользовательской ячейке)

    UILabel * label = [UILabel new];
    [self.contentView addSubview:label];
    NSDictionary * views = NSDictionaryOfVariableBindings(label);
//Inset 5 px
    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[label]-5-|" options:0 metrics:nil views:views]];
    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[label]-5-|" options:0 metrics:nil views:views]];
// height >= 44
    [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:self.mainLabel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:44.0]];
person JapCon    schedule 06.09.2016

Установите для contentViews heightAnchor минимально необходимую высоту.

Версия Swift 4.2 программно

contentView.heightAnchor.constraint(greaterThanOrEqualToConstant: <Required least Height>).isActive = true

person Abhishek Binniwale    schedule 22.03.2020

person    schedule
comment
пожалуйста, опишите, что вы сделали, чтобы решить проблему ОП - person Derviş Kayımbaşıoğlu; 18.12.2018
comment
Этот подход несколько сработал для меня, но автоматическое изменение размера в моем случае отключается, что противоречит цели. Оставив высоту строки как UITableView.automaticDimension и установив ограничение по высоте для представления, я работаю по мере необходимости. - person Derek Hierholzer; 23.03.2019