如何在自定义单元格中移动CGRect?

时间:2012-10-19 12:53:17

标签: iphone objective-c ios xcode uitableview

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

- (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;
}

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

enter image description here

我对结果感到满意,但我也想根据 nameLabel 更改单元格中的 costLabel 位置。如果 nameLabel 中有两个lines文本,我不想更改costLabel位置,但是如果line文本> nameLabel ,我想移动 costLabel 更高,所以我可以摆脱空间,让 costLabel 更接近 nameLabel 。< / p>

我在 cellForRowAtIndexPath

中尝试了这个
CGRect frame = cell.costLabel.frame;
frame.origin.y = frame.origin.y-10; // new y coordinate
cell.costLabel.frame = frame;

但它没有用。

任何解决方案或想法,我如何更改CGRect坐标(y origin)?

2 个答案:

答案 0 :(得分:2)

layoutSubviews将在想要绘制单元格时调用。在layoutSubviews中更改框架(即

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

   costLabel.frame = frame;

答案 1 :(得分:1)

您可以使用NSString UIKit additions

计算名称标签的大小