UITableViewAutomaticDimension 的最小单元格高度
Minimum cell height with UITableViewAutomaticDimension
是否可以设置单元格的最小高度?我使用动态:
tableView.estimatedRowHeight = 83.0
tableView.rowHeight = UITableViewAutomaticDimension
但是当我的 news title label text
排成一行时,我需要为单元格设置最小高度。
您是否尝试过在自定义 UITableViewCell
的 height >= 60.0
视图中创建约束?
在自定义单元格的自动布局代码处(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]];
知道了。使其工作如下。
在 UITableViewCell 上拖放一个 View,并将约束条件 Leading、Trailing、top 和 Bottom 设置为 0。
将高度约束设置为 >= ExpectedMinimumSize。
在 heightForRowAtIndexPath 委托方法中:
-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
return UITableViewAutomaticDimension;
}
在 ViewDidLoad 中:
self.tableView.estimatedRowHeight = 60; // required value.
@Hytek 回答了一个技巧。为此,您必须给出最小高度的限制。
例如:如果您的 table 单元格中有一个 UILabel
,并且您希望 UILabel
根据动态内容增加高度。你有像下面这样的代码。
tableView.estimatedRowHeight = 83.0
tableView.rowHeight = UITableViewAutomaticDimension
当内容较大时,它会增加你的标签高度,但当你的内容较小时,它也会降低。因此,如果您希望标签应该具有最小高度,那么您必须以 height >= 30.0
对标签的方式对 UILabel
进行高度限制。
这样你的 UILabel
高度就不会低于 30.0
。
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return (UITableView.automaticDimension > minimumHeight) ? UITableView.automaticDimension : minimumHeight
}
将 contentViews heightAnchor 设置为您的最低要求高度。
Swift 4.2 版本编程
contentView.heightAnchor.constraint(greaterThanOrEqualToConstant: <Required least Height>).isActive = true
是否可以设置单元格的最小高度?我使用动态:
tableView.estimatedRowHeight = 83.0
tableView.rowHeight = UITableViewAutomaticDimension
但是当我的 news title label text
排成一行时,我需要为单元格设置最小高度。
您是否尝试过在自定义 UITableViewCell
的 height >= 60.0
视图中创建约束?
在自定义单元格的自动布局代码处(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]];
知道了。使其工作如下。
在 UITableViewCell 上拖放一个 View,并将约束条件 Leading、Trailing、top 和 Bottom 设置为 0。 将高度约束设置为 >= ExpectedMinimumSize。
在 heightForRowAtIndexPath 委托方法中:
-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
return UITableViewAutomaticDimension;
}
在 ViewDidLoad 中:
self.tableView.estimatedRowHeight = 60; // required value.
@Hytek 回答了一个技巧。为此,您必须给出最小高度的限制。
例如:如果您的 table 单元格中有一个 UILabel
,并且您希望 UILabel
根据动态内容增加高度。你有像下面这样的代码。
tableView.estimatedRowHeight = 83.0
tableView.rowHeight = UITableViewAutomaticDimension
当内容较大时,它会增加你的标签高度,但当你的内容较小时,它也会降低。因此,如果您希望标签应该具有最小高度,那么您必须以 height >= 30.0
对标签的方式对 UILabel
进行高度限制。
这样你的 UILabel
高度就不会低于 30.0
。
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return (UITableView.automaticDimension > minimumHeight) ? UITableView.automaticDimension : minimumHeight
}
将 contentViews heightAnchor 设置为您的最低要求高度。
Swift 4.2 版本编程
contentView.heightAnchor.constraint(greaterThanOrEqualToConstant: <Required least Height>).isActive = true