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

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

tableView.estimatedRowHeight = 83.0
tableView.rowHeight = UITableViewAutomaticDimension

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

Ответ 1

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

Ответ 2

Получил это. Сделал работу, как показано ниже.

Перетащите вид сверху UITableViewCell и установите ограничения Ведущий, конечный, верхний и нижний как 0. Задайте ограничение по высоте как >= Ожидаемое. Минимальное значение.

В heightForRowAtIndexPath Delegatemethod:

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

В ViewDidLoad:

self.tableView.estimatedRowHeight = 60; // required value.

Ответ 3

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

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

tableView.estimatedRowHeight = 83.0
tableView.rowHeight = UITableViewAutomaticDimension

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

enter image description here

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

Ответ 4

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

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

    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]];

Ответ 5

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return (UITableView.automaticDimension > minimumHeight) ? UITableView.automaticDimension : minimumHeight
}