UITableViewCell仅在滚动时更新为正确的高度

时间:2016-06-03 09:06:15

标签: ios objective-c uitableview

我有一个动态的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];
}

4 个答案:

答案 0 :(得分:1)

从此WWDC讲座(约25分钟)Mysteries of Auto Layout开始,避免使用estimatedHeightForRowAtIndexPath,并确保正确实施自动布局约束。如果使用动态单元格高度,通常也不要在Interface Builder中设置行高。

答案 1 :(得分:1)

您错过了estimatedRowHeight

func configureTableView() {
  tableView.rowHeight = UITableViewAutomaticDimension
  tableView.estimatedRowHeight = 160.0
}

退房 Dynamic Table View Cell Height

答案 2 :(得分:0)

viewDidload中设置估计的行高也类似于

   self.tableView.estimatedRowHeight = 100; //estimated value

并且不要实施estimatedHeightForRowAtIndexPath此方法以及reload tableview in viewDidappearviewWillAppear

希望这会有所帮助:)

答案 3 :(得分:0)

我不确定您的单元格在代码中的样子,但是如果您没有使用reuseIdentifier初始化UITableViewCell,那么您可能遇到的问题是:UITableViewCell(style: .Default, reuseIdentifier: "myCell")