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

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

tableView.estimatedRowHeight = 83.0
tableView.rowHeight = UITableViewAutomaticDimension

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

4 ответа

Решение

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

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

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

tableView.estimatedRowHeight = 83.0
tableView.rowHeight = UITableViewAutomaticDimension

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

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

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

Перетащите View сверху 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.

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

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

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

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

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

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

    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]];
Другие вопросы по тегам