Минимальная высота ячейки с 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]];