0

前提

2 つのサブビュー A と B を単純に含むスーパービュー C があります。ASCII アート:

+-----------+
|   view A  |
|   view B  |
+-----------+

ここに私が欲しいものがあります:

  • A のトップは C のトップに固定する必要があります。A の身長は何にも固定されていません。実際にはその内容に応じて変化します: それは scrollview-lessNSTextViewです。

  • B の上部は、A の下部から常に 10 ピクセルでなければなりません。B のボトムは常に C のボトムに固定する必要があります。

ビュー C 全体を A と B に分割する必要があり、A と B の間の分割は A の現在の高さ ( によって決定されるNSTextView) によって決定する必要があり、B は A によって占有されていない残りのスペースを埋める必要があります。

つまり: A がトップにとどまります。B はスーパービューの残りの部分を埋めます。Aが成長するにつれて、Bは下に押し出されます。

問題

Interface Builder は常に、B の上部を C の上部に固定する削除不可能な制約を作成します。これは、B が常に特定の Y 位置に配置されることを意味します。B に高さの制約を与えると、これは起こりませんが、それは私が望んでいることではありません。

インターフェイスビルダー

スーパービューを実装して、updateConstraintsこの IB 生成の制約を削除しようとしました。そういうのもいいのですが、こうするとBのトップが調整されず、勝手に設定されているように見えてしまいます。制約の優先度を何に設定しても、B は C の下部、上部、または画面から離れた場所に配置されます。また、A は成長して C 全体を埋めるように見えます。

これは、私が取り除くことができない自動作成された制約です。

インターフェイスビルダー

追加の詳細

C はビューベースのセル ビューであることを付け加えておきますNSTableView。A と B を に合​​わせるために必要な高さを計算しtableView:heightOfRow、制約がすべてをレイアウトすることを期待します。

4

1 に答える 1

1

後世への回答: 説明されているような構成を持つことは、明らかに制約によって不可能です。これまでの私の解決策は次のとおりです。

  • 特定の高さを設定する制約を A に作成します。(IBではダミーの高さを設定しています。)
  • 特定の上限を設定する制約を B に作成します。
  • A と B の間に垂直方向の間隔を指定しないでください(少なくとも私の場合、これは で奇妙な動作を引き起こしましNSTableViewた)。
  • コントローラーまたはビュー コードで、A の高さを計算し、constraint.constantプロパティを使用して設定します。
  • また、コントローラーまたはビュー コードで、B の上部を (A の高さを使用して) 計算し、constraint.constantプロパティを使用して設定します。
于 2013-02-04T01:11:03.820 に答える