プロジェクトに単純なカスタム UITableViewCell があり、テーブルに編集アクションを追加しました。すべて問題ないように見えますが、編集時にインデントが機能せず、編集アイコンがコンテンツと重なっています。(削除ボタンは言うまでもありません)
カスタムセルは、通常どおり標準の制約を使用してインターフェイスビルダーで作成され、他の場所で次のようにうまくいかないことで述べられているように、クラスの layoutSubviews メソッドをオーバーライドしようとしました。
(void)layoutSubviews
{
[super layoutSubviews];
float indentPoints = self.indentationLevel * self.indentationWidth;
self.contentView.frame = CGRectMake(
indentPoints,
self.contentView.frame.origin.y,
self.contentView.frame.size.width - indentPoints,
self.contentView.frame.size.height
);
}
また、サブビューが実際には contentView 内にあり、View と Code ですべて問題ないように見えることも確認しました。
セルには indentationLevel/Width もプログラムで設定され、マスクは自動幅に自動サイズ変更されます。
最後の手段として、プログラムで UITableViewCell を作成できますが、それが役立つとは思いません。
推奨に従って、セルコンテンツの制約がスーパービューに固定されていることも確認しました。
また、運が悪いコードで自動ResizingMasksを手動で設定します
- 編集:
contentView の背景色を手動で黒に設定しましたが、「layoutSubviews」をオーバーライドしなくても、編集モードで正しくインデントされていることがわかりました。実際、それよりもうまく機能します。
ただし、ご覧のとおり、コンテンツはインデントされていません。最初は、セル (UIImage) の内容は contentView のサブビューではないと思いましたが、サブビューを nslogging すると、それらがそうであることがわかります。
NSLog(@"%@", self.contentView.subviews);
"<UIImageView: 0xa477030; frame = (23 7; 31 50); autoresize = TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xa477090>>"
なぜこれがここで起こり続けるのか、私は完全に迷っています。iOS 6 の新しい制約に関連する隠れた制約である必要があります。