什么时候为自定义UITableViewCell调用layoutSubviews?

Ser*_*nce 13 iphone cocoa-touch uitableview ios

什么时候在方法中layoutSubviews调用自定义?下面,我需要在设置属性后调用.我是否正确设置了此设置?我希望能够使用,因为我听说它的性能更好.UITableViewCellUITableViewCells cellForRowAtIndexPathlayoutSubviewsFiltersTableViewCellItemlayoutSubviews

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"FiltersTableViewCell";
    FiltersTableViewCell *filtersTableViewCell = [[self dequeueReusableCellWithIdentifier:cellIdentifier] retain];
    FiltersTableViewCellItem *filtersTableViewCellItem = [[self.filtersTableViewCellItems objectAtIndex:[indexPath row]] retain];

    if (!filtersTableViewCell)
    {
        filtersTableViewCell = [[FiltersTableViewCell alloc] initWithFiltersTableViewCellItem:filtersTableViewCellItem];
        filtersTableViewCell.delegate = self;
    }
    else
    {
        filtersTableViewCell.filtersTableViewCellItem = filtersTableViewCellItem;
    }
    return [filtersTableViewCell autorelease];
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ose 16

layoutSubviews在之后的某个时刻tableView:willDisplayCell:被调用,之后被称为tableView:cellForRowAtIndexPath:.您可以通过在相关方法中设置断点并查看它们的命中顺序来验证这一点.例如,在结尾处设置断点tableView:cellForRowAtIndexPath:.然后添加以下方法FiltersTableViewCell

- (void)layoutSubviews
{
    [super layoutSubviews];
}
Run Code Online (Sandbox Code Playgroud)

并在那里设置断点.然后运行应用程序,看看会发生什么.

  • 但请注意,即使在`willDisplayCell`之后调用`layoutSubviews`,也不意味着为了自我调整而完成布局.我发现在`willDisplayCell`之前没有填充的自调整单元格没有得到正确的高度,即使它也通过调用`layoutIfNeeded`来强制布局传递.我不得不改变我的代码以填充`cellForRowAtIndexPath`而不是自我调整大小. (7认同)