Posted at

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

More than 3 years have passed since last update.

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

Screen Shot 2016-03-21 at 3.05.22 PM.png

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

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

Screen Shot 2016-03-21 at 3.04.16 PM.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.


@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 の定義を見てみましょう。

@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

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

1.png

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

2.png

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

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

Screen Shot 2016-03-21 at 4.03.02 PM.png

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

Screen Shot 2016-03-21 at 4.00.07 PM.png

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


Thin divider

Screen Shot 2016-03-21 at 4.12.00 PM.png


Thick divider

Screen Shot 2016-03-21 at 4.13.12 PM.png


Pane Splitter

Screen Shot 2016-03-21 at 4.14.43 PM.png


まとめ

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


NSSplitViewItemBehaviorTester (GitHub)

https://github.com/codelynx/NSSplitViewItemBehaviorTester/