プログラムで実装されたカスタム UITableViewCell で iOS 6 の新しい自動レイアウト機能を使用しようとしています。addConstraint 呼び出しを追加しましたが、スクロールするまでは最初は適切に機能します。スクロール後にセルに戻ると、レイアウトが破棄されます。ゴミ箱に入れられたということは、フィールド間の余白がすべて間違っていることを意味します (大きすぎて、セルのサイズをはるかに超えています)。これは dequeueReusableCellWithIdentifier メソッドと関係があると推測していますが、セル内のフィールドを再初期化する必要があるのと同じように、「汚れた」セルが残っていますが、適切にレンダリングするためにそれをなだめるために何もできないようですまた。セルを返す前に [self.contentView updateConstraints] を呼び出してみました。制約を破棄して再作成しようとしました。うまくいかないだけでなく、ただし、layoutSubviews で試行すると、ある種の無限ループでフリーズします。何か案は?
制約を設定するコードは次のとおりです。initWithStyle:reuseIdentifier にあります。
[self.completedLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.nextSetHeaderLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.nextSetDetailLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.youWillLearnHeaderLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.youWillLearnDetailLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.contentView removeConstraints:[self.contentView constraints]];
NSDictionary *views = NSDictionaryOfVariableBindings(_completedLabel, _nextSetHeaderLabel, _nextSetDetailLabel, _youWillLearnHeaderLabel, _youWillLearnDetailLabel);
[self.contentView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[_completedLabel]-5-|"
options:0
metrics:nil
views:views]];
[self.contentView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[_nextSetHeaderLabel]-5-|"
options:0
metrics:nil
views:views]];
[self.contentView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[_nextSetDetailLabel]-5-|"
options:0
metrics:nil
views:views]];
[self.contentView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[_youWillLearnHeaderLabel]-5-|"
options:0
metrics:nil
views:views]];
[self.contentView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[_youWillLearnDetailLabel]-4-|"
options:0
metrics:nil
views:views]];
[self.contentView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[_completedLabel]-12-[_nextSetHeaderLabel]-0-[_nextSetDetailLabel]-12-[_youWillLearnHeaderLabel]-0-[_youWillLearnDetailLabel(>=20)]-1-|"
options:0
metrics:nil
views:views]];