如下图所示,UITableView
子视图仅出现在tableview重新加载或单元格重用上(主要在滚动期间)。我的UITableViewCell
就是我想要的蓝色圆圈。当它第一次出现时,它将是一个小点,如图中所示,在滚动或刷新tableview时,它显示为整圆。
可能是什么问题?
我在cellforRowAtIndexPath
方法
cell.categoryRoundBackground.layer.cornerRadius=cell.categoryRoundBackground.frame.size.height/2;
答案 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];
希望它能解决你的问题