0

テーブルビューのcellForRowAtIndexPath:メソッドには、画像を追加してセルに配置する次のコードがあります。

        UIImageView *PocketIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pocket-icon"]];
        [cell addSubview:PocketIcon];

        NSLayoutConstraint *iconDistanceFromCellTopConstraint = [NSLayoutConstraint constraintWithItem:PocketIcon attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:cell attribute:NSLayoutAttributeTop multiplier:1.0 constant:14.0];
        [cell addConstraint:iconDistanceFromCellTopConstraint];

        NSLayoutConstraint *iconDistanceFromCellLeftConstraint = [NSLayoutConstraint constraintWithItem:PocketIcon attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:cell attribute:NSLayoutAttributeLeft multiplier:1.0 constant:22.0];
        [cell addConstraint:iconDistanceFromCellLeftConstraint];

ただし、画像が実際に追加されるたびに、セルの左上隅に表示されます。制約が機能しない原因となっている上記のコードの何が問題になっていますか?

4

2 に答える 2

3

translatesAutoresizingMaskIntoConstraintsNOに設定した後、あなたのコードは私のために機能します:

UIImageView *PocketIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pocket-icon"]];
PocketIcon.translatesAutoresizingMaskIntoConstraints = NO;
[cell addSubview:PocketIcon];

もう 1 つ、ちょっとしたアドバイスをしたいと思います。私は制約を広範囲に使用しており、制約を操作するためにカテゴリを使用し始めた後、私の人生はずっと楽になりました。これは次のとおりです。

https://github.com/PureLayout/PureLayout

あなたも試してみることをお勧めします。

于 2013-10-17T19:50:11.503 に答える
2

したがって、imageView と制約を cell ( [cell.contentView addSubview:PocketIcon];) ではなく cell.contentView に追加します。また、AutoresizingMask をオフにしたいので、これを追加し[PocketIcon setTranslatesAutoresizingMaskIntoConstraints:NO]ます。テーブルがスクロールされるときに制約を複数回追加しないようにするために、ブール値が必要になる場合があります。

于 2013-10-17T19:51:03.447 に答える