我正在尝试在UILabel
内的同一垂直轴上放置两个UITableViewCell
,当单元格为分组<时,它们占据单元格宽度的50% / strong>表格单元格。
我已尝试self.frame.size.width / 2
,但self.frame.size.width
的宽度看起来像整个单元格的宽度,就好像它不是一个分组的单元格一样。换句话说,它似乎是整个屏幕的宽度,在全屏幕表中。
我还将self.frame.size.width
与self.contentView.frame.size.width
进行了比较,两者看起来都是一样的,并且不是分组单元格的实际宽度,我不相信。
当我使用指定的框架初始化UILabel
并将 x轴指定为0
时,标签会将自身置于分组的左边缘细胞,太棒了!这就是我想要的。
但是,对于我希望位于第一个标签右侧的第二个UILabel
,在同一水平轴上,我不知道如何计算标签框架的x轴的起点。
同样,我不知道如何计算这些标签的宽度,因为我似乎无法获得分组单元格的宽度。
我觉得必须有一种方法来获得准确的宽度,因为对于第一个标签,给予标签的框架x轴为0将其正确放置在单元格的边缘,这正是我需要的。所以我需要内部,这个代码也知道那个单元格的宽度。
答案 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);
}