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に2つのテキストがある場合、costLabelの位置を変更したくありませんが、nameLabelにテキストが1つしかない場合は、 costLabelを上に移動して、スペースを削除してcostLabelを作成できます。 nameLabelに近い。linesline

私は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 の追加

于 2012-10-19T13:13:29.320 に答える