0

所以,我有一个自定义单元类,在实现中我有这个代码:

- (void)layoutSubviews {
    [super layoutSubviews];

    CGRect contentRect = self.contentView.bounds;
    CGFloat boundsX = contentRect.origin.x;
    CGRect frame;

    frame = CGRectMake(boundsX+10,10, 50, 50);
    picture.frame = frame;

    frame = CGRectMake(boundsX+75 ,0, 170, 50);
    nameLabel.frame = frame;

    frame = CGRectMake(boundsX+75 ,43, 225, 23);
    costLabel.frame = frame;

    frame = CGRectMake(boundsX+280, 30, 8, 13);
    arrow.frame = frame;
}

现在让我们看看下图这个布局是如何工作的:

在此处输入图像描述

我对结果很满意,但我也想根据 nameLabel 更改单元格中的costLabel位置。如果nameLabel中有两个文本,我不想更改 costLabel 的位置,但是如果 nameLabel 只有一个文本,我想将costLabel上,这样我就可以摆脱空间并制作costLabel更接近nameLabellinesline

我在cellForRowAtIndexPath试过这个:

CGRect frame = cell.costLabel.frame;
frame.origin.y = frame.origin.y-10; // new y coordinate
cell.costLabel.frame = frame;

但它没有用。

任何解决方案或想法,我怎样才能改变CGRect坐标(y原点)?

4

2 回答 2

2

layoutSubviews 将在它想要绘制您的单元格时被调用。在 layoutSubviews 中进行框架更改(即

if (thereIsOnlyOneLineInThisCell) {
  frame = CGRectMake(boundsX+75 ,43 -10, 225, 23);
} else {
   frame = CGRectMake(boundsX+75 ,43, 225, 23);
}

   costLabel.frame = frame;
于 2012-10-19T13:06:37.940 回答
1

您可以使用以下方法计算 nameLabel 的大小:NSString UIKit addeds

于 2012-10-19T13:13:29.320 回答