我想动态调整自定义单元格高度。
在我的tableView中有三个自定义列:
现在“产品名称”列未显示全名。它只显示适合的文字。但无法显示全名。
虽然我已将heightForRowAtIndexPath
设置如下:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewAutomaticDimension;
}
这是在我的CustomCell
类
self.productNameLabel.lineBreakMode = NSLineBreakByWordWrapping;
self.productNameLabel.numberOfLines = 0;
示例:
NSString *prodName = @"This is my product name which may contain description with it";
因此,在上面的示例中,我的UITableViewCell
仅显示了这么多产品名称:This is my product
并且它会进一步转义字符串。
参见下面附带的属性部分和约束......
我想在Nutrient
列
请帮助我,尝试所有可能的解决方案,但无法解决此问题。
这样我的uitableview数据显示...但无法在营养素中显示全名。
答案 0 :(得分:1)
首先,estimatedRowHeight
应设置为某个特定数字。它是tableView
用于计算滚动指标大小的估计,但并不真正用它来确定单元格的大小。理想情况下,你应该设置如下:
tableView.estimatedRowHeight = 44
tableView.rowHeight = UITableViewAutomaticDimension
然后确保您的单元格已定义自动布局约束,可用于定义其大小,特别是高度。在您的情况下,请确保标签顶部锚点被约束到单元格contentView.topAnchor
,并且底部锚点被约束到单元格contentView.bottomAnchor
,以及标签的前导和尾随contentView
的领先和尾随。因此,当标签含有更多内容时,它会尝试扩展,单元格也应该扩展。
考虑使用UIStackView
来管理单元格的内容,因为即使扩展和折叠单元格也会更容易管理。如果这是您的目标,请参阅my answer其他问题。
答案 1 :(得分:0)
答案 2 :(得分:0)
你做得很好但需要更多。首先你设置。 tableView.estimatedRowHeight = 44 在你给出的底部约束等于13之后,只要使它大于或等于13.它将适用于你。
答案 3 :(得分:0)
设置行高的自动尺寸&估计行高,确保执行以下步骤,自动尺寸对单元格/行高度布局有效。我刚刚测试了以下步骤和代码并且工作正常。
UITableViewAutomaticDimension
分配给rowHeight& estimatedRowHeight heightForRowAt
并向其返回值UITableViewAutomaticDimension
)-
目标C:
// in ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property IBOutlet UITableView * table;
@end
// in ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
self.table.dataSource = self;
self.table.delegate = self;
self.table.rowHeight = UITableViewAutomaticDimension;
self.table.estimatedRowHeight = UITableViewAutomaticDimension;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
<强>夫特:强>
@IBOutlet weak var table: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Don't forget to set dataSource and delegate for table
table.dataSource = self
table.delegate = self
// Set automatic dimensions for row height
table.rowHeight = UITableViewAutomaticDimension
table.estimatedRowHeight = UITableViewAutomaticDimension
}
// UITableViewAutomaticDimension calculates height of label contents/text
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
用于UITableviewCell中的标签实例
注意:如果您有多个动态长度的标签(UIElements),应根据其内容大小进行调整:调整您的标签'内容拥抱和压缩阻力优先级'想要以更高的优先级扩展/压缩。