Auto Layout を学習してレイアウト テクニックを改善しようとしてきましたが、解決できなかった問題に出くわしました。
何が起こるかは次のとおりです。とりわけ、 aUITableView
と aを含むビューコントローラーがありUIView
ます。このビューはテーブル ビューのすぐ下に配置され、その高さは画面全体の高さには達しません (上半分を占めるとしましょう)。
グループ化されたスタイルを使用し、前述のビューのすぐ上に配置されたテーブル ビューには、半透明の背景があるため、そのすぐ下のビューの内容を実際に見ることができます。ただし、ビューは画面の半分を占めるため、最初にビュー コントローラーを読み込むときに背景のコンテンツ全体がはっきりと見えるようにするには、このテーブル ビューに tableHeaderView (これも半透明) を追加する必要があります。
これの最終的な効果は、テーブル ビューを上にスクロールすると背景に表示されなくなる固定の tableHeaderView のようなものです。
これは、スプリングとストラットを使用した簡単な方法で行われますが、テーブル ビューにヘッダーを追加しようとするたびに (どのように行っても)、Auto Layout によってアプリがクラッシュします。
バックグラウンド (otherView) のビューの高さと tableHeaderView の高さを常に一致させる方法を探しているので、次を使用しています。
[self.view addConstraint:[NSLayoutConstraints constraintWithItem:headerView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:otherView attribute:NSLayoutAttributeHeight multiplier: 1 constant:0]];
( otherView はその子ではないため、制約をテーブルビューに直接追加できないことは私の理解です)
また:
[headerView setTranslatesAutoResizingMaskIntoConstraints:NO]
これらの呼び出しは常にこのクラッシュを引き起こします:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UITableView's implementation of -layoutSubviews needs to call super.'
これを行う方法はありますか?自動レイアウトを使用して、実際に tableHeaderView の高さをビューの別の要素に結び付けることは可能ですか?
また、私は長い間 IB から離れていたことにも注意する必要があります。そのため、これはすべて純粋にコードで、特にloadView
.