我有一个动态的UITableViewCells,其中一些在加载单元格时是正确的高度,但有些只在tableview上下滚动时才更新以更正布局。
- (void)viewDidLoad
self.heightAtIndexPath = [NSMutableDictionary new];
self.tableView.rowHeight = UITableViewAutomaticDimension;
这是我的tableView委托:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object {
cell.imageView.file = (PFFile *)object[@"image"];
[cell.imageView loadInBackground:^(UIImage * _Nullable image, NSError * _Nullable error) {
cell.imageHeightConstraint.constant = image.size.height / image.size.width * cell.cardView.frame.size.width;
[cell.imageView updateConstraints];
}];
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSNumber *height = [self.heightAtIndexPath objectForKey:indexPath];
if(height) {
return height.floatValue;
} else {
return UITableViewAutomaticDimension;
}
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
NSNumber *height = @(cell.frame.size.height);
[self.heightAtIndexPath setObject:height forKey:indexPath];
}
答案 0 :(得分:1)
从此WWDC讲座(约25分钟)Mysteries of Auto Layout开始,避免使用estimatedHeightForRowAtIndexPath,并确保正确实施自动布局约束。如果使用动态单元格高度,通常也不要在Interface Builder中设置行高。
答案 1 :(得分:1)
您错过了estimatedRowHeight
func configureTableView() {
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 160.0
}
答案 2 :(得分:0)
在viewDidload
中设置估计的行高也类似于
self.tableView.estimatedRowHeight = 100; //estimated value
并且不要实施estimatedHeightForRowAtIndexPath
此方法以及reload tableview in viewDidappear
或viewWillAppear
。
希望这会有所帮助:)
答案 3 :(得分:0)
我不确定您的单元格在代码中的样子,但是如果您没有使用reuseIdentifier初始化UITableViewCell
,那么您可能遇到的问题是:UITableViewCell(style: .Default, reuseIdentifier: "myCell")