SplitView の中の TableView の折りたたみ


SplitView で分割した UI

SplitView の上のサブビューの中に TableView を入れているのだが、 TableView の下、 つまり仕切り (divider) の上にボタンを配置したかったので、 カスタム View の上に TableView とボタンをのせて SplitView に配置した。


仕切りを上に上げて上のビューを折畳んだところ


仕切りを下げると TableView のヘッダが表示されない

これで仕切りを上下すると TableView が伸び縮みするようになったが、 めいいっぱい仕切りを上げてから下に下げると、 TableView のヘッダが表示されなくなってしまった。

どうも TableView の下のボタンの高さ分だけカスタム View からはみ出しているようだ。

仕切りは一旦ここより上に上がらないような反応をするものの、 そのまま上に上げるとビューが折たたまれる

そこでサブビューのサイズの最小値を設定することにした。 それには、 SplitView の デリゲート オブジェクトで、 splitView:constrainMinCoordinate:ofSubviewAt: デリゲートメソッドが SplitView の上側のサブビューの最小値を返すようにする。 つまり最小値まで仕切りを上げた時 TableView の高さは 0 になる。 (ここでもし最小値が 0 の場合、 おそらく TableView の Y 座標が上にずれてしまい、 ヘッダが表示されなくなるのではないだろうか。)

仕切りをめいいっぱい上にまで上げると、 上のサブビューは折たたまれて非表示になる (上から 2 番目の図のようになる。) そして、 今度は仕切りを下げても TableView のヘッダはちゃんと表示される。

もし最小値まで小さくした場合にビューが折たたまれないようにするには、 デリゲートメソッド splitView:canCollapseSubview: が 上のサブビューに対して NO を返すようにすればよい。