UITableviewCell子视图仅出现在滚动或单元重用(iOS)上

时间:2015-12-16 09:45:47

标签: ios objective-c iphone uitableview

如下图所示,UITableView子视图仅出现在tableview重新加载或单元格重用上(主要在滚动期间)。我的UITableViewCell就是我想要的蓝色圆圈。当它第一次出现时,它将是一个小点,如图中所示,在滚动或刷新tableview时,它显示为整圆。

可能是什么问题?

Screen image

我在cellforRowAtIndexPath方法

中使用以下代码
cell.categoryRoundBackground.layer.cornerRadius=cell.categoryRoundBackground.frame.size.height/2;

4 个答案:

答案 0 :(得分:2)

尝试使用dequeueReusableCellWithIdentifier:forIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    CustomTableViewCell *cell1 = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomID" forIndexPath:indexPath];

答案 1 :(得分:1)

最可能的问题是,当您第一次通过调用

访问单元格的帧高时
cell.categoryRoundBackground.frame.size.height / 2

单元格从未被放置在表格视图中,它不知道它的帧高度是多少,因此它使用了一些默认值。实际高度取决于代码在heightForRowAtIndexPath:方法中返回的值。

您可以通过自己计算帧大小来解决此问题。您应该可以这样做,因为您的代码会将值提供给heightForRowAtIndexPath:

答案 2 :(得分:1)

在视图布局其子视图之前,您可能会更改角半径。 你应该尝试把这行

cell.categoryRoundBackground.layer.cornerRadius=cell.categoryRoundBackground.frame.size.height/2;

- (void)viewDidLayoutSubviews {}

答案 3 :(得分:1)

您必须覆盖 CustomTableViewCell

中的方法
- (void)layoutSubviews{
   [super layoutSubviews];
   self.categoryRoundBackground.layer.cornerRadius=self.categoryRoundBackground.frame.size.height/2;
   self.categoryRoundBackground.layer.masksToBounds = YES;
}

CellForRowAtIndexPath:你必须在最后写这些行

// Update layout
[cell.contentView setNeedsLayout];
[cell.contentView layoutIfNeeded];

希望它能解决你的问题