NSSplitViewController の NSSplitViewItem の Behavior プロパティの Content List と Sidebar の違い

NSSplitViewController って聞いた事ありますか？そう、Google で検索しても、ひょっとして「UISplitViewController」ですかって言われてしまう奴です。

<img width="392" alt="Screen Shot 2016-03-21 at 3.05.22 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/65634/b746e13f-8308-36be-8d90-773ea79563e7.png">

OS X 10.10 Yosemite から入ってきたもので、Xcode や多くのMacアプリのように画面を分割して利用する場合に重宝します。

さて、これを Interface Builder で配置してみると、Split View Item に Behavior というのプロパティがある事に気がつきます。今回は、この Split View Item の Behavior についてお話ししたいと思います。包括的な `NSSplitViewController` の話ではありませんので、ご了承ください。

<img width="261" alt="Screen Shot 2016-03-21 at 3.04.16 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/65634/ca6bf2a8-9bd9-5d6d-69db-fe5920ffba4b.png">

さて、「Default」「Sidebar」「Content List」と選べるようになっていますが、どう違うのでしょうか？ドキュメントを見ても、そもそも `NSSplitViewItem` はありません（2016年3月現在）。OS X El Capitan v10.11 の変更点に関するドキュメントにこんな表現があります。

> **New NSSplitViewItem properties**
> NSSplitViewItem also has support for flexible sidebars, which have the ability to auto-hide as the window shrinks, which is especially useful in split screen.

```.swift
@available(OSX 10.10, *)
public class NSSplitViewItem : NSObject, NSAnimatablePropertyContainer, NSCoding {
    ...
    /// The standard behavior type of the receiver. See initializers for descriptions of each behavior.
    @available(OSX 10.11, *)
    public var behavior: NSSplitViewItemBehavior { get }
    ...
}
```
OS X El Capitan v10.11 からの機能なのですね。では、`NSSplitViewItemBehavior` の定義を見てみましょう。

```.swift
@available(OSX 10.11, *)
public enum NSSplitViewItemBehavior : Int {
    
    case Default
    case Sidebar
    case ContentList
}
```

ん〜正直、これで察してくれよと言われても、こんなダイイングメッセージみたいなヒントでは挙動がつかめません。

仕方がないので、サンプルコードを作ってみました。どの SplitViewItem がどの View Controller に対応しているかは正直わかりにくいです。

![Screen-Shot-2016-03-21-at-3.02.22-PM-2.jpg](https://qiita-image-store.s3.amazonaws.com/0/65634/cd6c9586-50af-5271-152c-88c5dfe265c9.jpeg)

実行してみましょう。Xcode 的な使い方を想定すると、左が Content List で、右が Sidebar かなと思った程度で、よくわかりません。見栄えは、Sidebar がやや色が白っぽい印象を受けますが、違いはわかりません。


![1.png](https://qiita-image-store.s3.amazonaws.com/0/65634/8b24ad60-2874-d08d-3cda-0019a9d062ff.png)

Divider を移動させて「Sidebar」 を collapse させてみましょう。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/65634/e396a87d-9f41-7c14-8552-f46fd76c8c4c.png)

消えてしまいました。UIから再度「sidebar」を出現させる事は難しそうです。Thin divider を選んでユーザーに Collapse させる場合は復活させる、ボタンなりメニューなりが必要そうです。

ちなみに、UISplitView のプロパティから Style が選べるようになっています。「Thick divider」と「Pane splitter」の場合は、collapse した後でも、つまみの部分が残っているので、UIから復活できそうです。

<img width="261" alt="Screen Shot 2016-03-21 at 4.03.02 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/65634/c2ac793f-3344-d61e-cdc3-61e4a6c0bab2.png">

結局、「User can Collapse」の設定があるので、「Collapse」するかしないかは、「Content List」か「Sidebar」かはあまり関係ないようです。

<img width="260" alt="Screen Shot 2016-03-21 at 4.00.07 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/65634/3593c1c4-f7fe-c2d7-a480-45497520bced.png">

参考までに divider style の違いのスクリーンショットを撮ってみました。

#### Thin divider
![Screen Shot 2016-03-21 at 4.12.00 PM.png](https://qiita-image-store.s3.amazonaws.com/0/65634/f8cde3c2-ed7b-df76-cdd9-48e2785e436f.png)

#### Thick divider
![Screen Shot 2016-03-21 at 4.13.12 PM.png](https://qiita-image-store.s3.amazonaws.com/0/65634/17f15f8a-f7c6-a071-7d5e-408a24371497.png)

#### Pane Splitter
![Screen Shot 2016-03-21 at 4.14.43 PM.png](https://qiita-image-store.s3.amazonaws.com/0/65634/528d2c94-349e-c830-d7f1-c61775458a85.png)

## まとめ
結局サンプルコードまで、書いて試してみましたが、「Content List」と「Sidebar」の目的や、多少の色の違い以外に違いはわかりませんでした。将来 Apple がドキュメントを更新して、説明がある事を望みます。最後に、GitHub にサンプルコードを置いてみましたので、皆さまも是非お試しいただき、違いに気がついた場合には是非コメントをいただけると幸いです。

#### NSSplitViewItemBehaviorTester (GitHub)
https://github.com/codelynx/NSSplitViewItemBehaviorTester/