我有一个自定义单元格,应该与显示器的边缘隔开。为此我用这个:
- (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来在添加单元格时实现操作吗?
编辑:从我所看到的,细胞的重新渲染经历了三个阶段。 第一阶段,其中几个:
第二阶段,它更新视图单元格:
现在一切看起来都不错。我想要隐藏/显示的视图是隐藏/显示的,一切都很好但是然后某种清理打破了布局:
答案 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];
}