更新表时UITableViewCell setFrame“bugged”

时间:2017-05-17 08:56:22

标签: ios objective-c uitableview

我有一个自定义单元格,应该与显示器的边缘隔开。为此我用这个:

- (void)setFrame:(CGRect)frame {
    frame.origin.x += kCellSidesInset;
    frame.size.width -= 2 * kCellSidesInset;
    [super setFrame:frame];
}

我有一个隐藏/显示单元格内堆叠视图底部视图的按钮。为此,我使用此代码:

    - (IBAction)showCardDetails:(id)sender {
        UITableView *cellTableView = (UITableView*)[[[[sender superview] superview] superview] superview ];
        [cellTableView beginUpdates];
        self.details.hidden = !self.details.hidden;
        [cellTableView endUpdates];
//    [cellTableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationBottom];
//    [cellTableView reloadData];
    }

但是,当表格更新以反映更改时,正确的填充变得更大。然后当我滚动一下它就会被修复。

尽可能在视觉上判断它是3次。也许它在右边增加了两个kCellSidesInset,但我对此表示怀疑。

为什么会发生这种情况?如何解决?也许它可以避免通过插入给UITableView的单元格(我在查找如何执行此操作时遇到一些麻烦)。

PS。所有代码都在CustomCell.m中。我愿意接受一个更好的方法来获取操作中的UITableView。我应该在CustomTableViewController.m中使用selector来在添加单元格时实现操作吗?

编辑:从我所看到的,细胞的重新渲染经历了三个阶段。 第一阶段,其中几个:

enter image description here

第二阶段,它更新视图单元格:

enter image description here

现在一切看起来都不错。我想要隐藏/显示的视图是隐藏/显示的,一切都很好但是然后某种清理打破了布局:

enter image description here

1 个答案:

答案 0 :(得分:0)

我通过重构setFrame方法来解决问题,以使用单元格的superview框架作为单元格框架的参考点

- (void)setFrame:(CGRect)frame {
    frame.origin.x = self.superview.frame.origin.x + kCellSidesInset;
    frame.size.width = self.superview.frame.size.width - 2 * kCellSidesInset;

    [super setFrame:frame];
}