プログラムでテーブルビューセルの右上にラベルを追加しようとしています。
[label addConstraint:[NSLayoutConstraint
constraintWithItem:label
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:cell
attribute:NSLayoutAttributeRight
multiplier:1.0
constant:0]];
これは、私が推測しているビューのサブツリーの外側にある何かを参照したというエラーを出しますが、それはセル自体ですか?上と右に2つの別々の制約が必要ですか?
制約を使用して正しく実行したいのですが、セル幅を手動で取得してラベルの位置を変更することも試みました。ユーザーがデバイスを回転させた場合に備えて、方向変更メソッドにコードの複製を追加する必要があります。制約を使用できない場合は、この方法を使用できますが、セルの正しい幅を取得できません。これを試しました。
[label setFrame:CGRectMake(cell.frame.size.width-318, 10, 308, 30)];
cell.frame.size.width
セルの正しい幅が取得されていないようです。
編集:セルの幅はその中のコンテンツに相対的であることがわかったので、上記の行を変更tableView.frame.size.width
して、ジョブを実行するtableView全体のwithを取得しました。それが可能かどうかを確認するために、制約に関するフィードバックを引き続き受け取りたいと思います。
編集:これは私がセルとラベルを設定する方法です...
NSString *cellId = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if(cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId];
}
UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake(10, 10, 308, 30)];
label.text = @"Whatever text";
// Contraint added here
[cell.contentView addSubview: label];
編集: `@frozendevilに感謝します
正しい制約を適用した後、ラベルの幅を設定するために使用した最終的なコードを表示するためだけに...
[cell.contentView addConstraint:[NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:200]];