子视图的位置根据是在cellView还是tableViewController中计算而改变

时间:2014-05-20 18:53:11

标签: ios objective-c

我使用相同的公式来计算读/未读指示符的位置,但是,根据我是从tableViewController还是自定义tableViewCell类计算它,红点的位置也会改变(它也是如此)如果在tableViewController中计算,则单元格中的低,如果在单元格中计算,则它在中间完美)。唯一的区别是在tableViewController中我用cell开始计算,而在tableViewCell类中我用self开始它们,但是,它应该是相同的,因为我将单元格传入像这样的tableViewcontroller

- (void)configureCell:(MMTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{

我的偏好是能够在tableViewController中进行设置计算(由于多种原因),但是,当我在自定义tableViewCell类中执行它们时,定位要好得多。

你能解释一下为什么会这样吗

来自自定义tableViewCell类的layoutSubviews

 if (_unreadIndicator == nil) {    
       _unreadIndicator = [[MMCircles alloc] initWithFrame:CGRectMake(0, 0, 18, 18) andColor:[UIColor redColor]];
        _unreadIndicator.circleColor = [UIColor blackColor];
       [self.contentView addSubview:_unreadIndicator];
     }

    CGRect circleframe = self.unreadIndicator.frame;
    circleframe.origin.x = self.contentView.frame.size.width - self.unreadIndicator.frame.size.width - 10;
    circleframe.origin.y = (self.contentView.frame.size.height - self.unreadIndicator.frame.size.height) / 2.0;
    self.unreadIndicator.frame = circleframe;
来自tableViewController的

   circleframe = _unreadIndicator.frame;
   circleframe.origin.x = cell.contentView.frame.size.width - cell.unreadIndicator.frame.size.width - 10;
   circleframe.origin.y = (cell.contentView.frame.size.height - cell.unreadIndicator.frame.size.height) / 2.0;
   _unreadIndicator.frame = circleframe;
  [cell.contentView addSubview:_unreadIndicator];
来自tableViewController perfectly aligned red dot

red dot too low

中间点的图像是在自定义tableViewCell类中计算它的位置时,中心下方的红点的图像是在它的位置计算时tableViewController

1 个答案:

答案 0 :(得分:0)

在您尝试计算表格视图控制器(cellForRowAtIndexPath:)中圆圈位置的位置,单元格的视图层次结构尚未准备好进行计算。重新尝试执行 - 特别是,单元格的高度可能尚未设置。但是,在单元格自己的layoutSubviews方法中,单元格最有可能设置其高度,并且更适合您尝试执行的操作。也就是说,在调用单元格cellForRowAtIndexPath:之前,表格视图完成了从layoutSubviews返回的单元格准备显示的其他内容。你的代码工作。