计算分组的tableview单元格的宽度

时间:2013-01-04 01:55:39

标签: uitableview uilabel

我正在尝试在UILabel内的同一垂直轴上放置两个UITableViewCell,当单元格为分组<时,它们占据单元格宽度的50% / strong>表格单元格。

我已尝试self.frame.size.width / 2,但self.frame.size.width的宽度看起来像整个单元格的宽度,就好像它不是一个分组的单元格一样。换句话说,它似乎是整个屏幕的宽度,在全屏幕表中。

我还将self.frame.size.widthself.contentView.frame.size.width进行了比较,两者看起来都是一样的,并且不是分组单元格的实际宽度,我不相信。

当我使用指定的框架初始化UILabel并将 x轴指定为0时,标签会将自身置于分组的左边缘细胞,太棒了!这就是我想要的。

但是,对于我希望位于第一个标签右侧的第二个UILabel,在同一水平轴上,我不知道如何计算标签框架的x轴的起点。

同样,我不知道如何计算这些标签的宽度,因为我似乎无法获得分组单元格的宽度。

我觉得必须有一种方法来获得准确的宽度,因为对于第一个标签,给予标签的框架x轴为0将其正确放置在单元格的边缘,这正是我需要的。所以我需要内部,这个代码也知道那个单元格的宽度。

1 个答案:

答案 0 :(得分:0)

好的,我找到了实现这个目标的好方法。如果您要对UITableViewCell进行子类化并想要调整单元格的子视图,则需要在layoutSubviews:方法内执行这些计算和帧调整。在此方法内部,即使使用分组的单元格,单元格的contentView也将是预期的宽度。以下是我的layoutSubviews函数的样子......

- (void)layoutSubviews {

    [super layoutSubviews];

    // half of the cell's content view width
    CGFloat halfCellWidth = self.contentView.frame.size.width / 2;

    // the dimensions of the message label, primarily for the height
    CGSize mesageLabelDimensions = [_message.text sizeWithFont:[UIFont systemFontOfSize:12]
                                             constrainedToSize:CGSizeMake(self.contentView.frame.size.width - (LEFT_RIGHT_MARGIN * 2), 500.0)];

    // adjust the frames of the cell labels
    _source.frame = CGRectMake(LEFT_RIGHT_MARGIN, TOP_BOTTOM_MARGIN, halfCellWidth - LEFT_RIGHT_MARGIN, LABEL_LINE_HEIGHT);
    _timestamp.frame = CGRectMake(halfCellWidth, TOP_BOTTOM_MARGIN, halfCellWidth - LEFT_RIGHT_MARGIN, LABEL_LINE_HEIGHT);
    _message.frame = CGRectMake(LEFT_RIGHT_MARGIN, LABEL_LINE_HEIGHT + (TOP_BOTTOM_MARGIN * 2), mesageLabelDimensions.width, mesageLabelDimensions.height);

}