NSSplitViewController って聞いた事ありますか?そう、Google で検索しても、ひょっとして「UISplitViewController」ですかって言われてしまう奴です。
OS X 10.10 Yosemite から入ってきたもので、Xcode や多くのMacアプリのように画面を分割して利用する場合に重宝します。
さて、これを Interface Builder で配置してみると、Split View Item に Behavior というのプロパティがある事に気がつきます。今回は、この Split View Item の Behavior についてお話ししたいと思います。包括的な NSSplitViewController
の話ではありませんので、ご了承ください。
さて、「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 に対応しているかは正直わかりにくいです。
実行してみましょう。Xcode 的な使い方を想定すると、左が Content List で、右が Sidebar かなと思った程度で、よくわかりません。見栄えは、Sidebar がやや色が白っぽい印象を受けますが、違いはわかりません。
Divider を移動させて「Sidebar」 を collapse させてみましょう。
消えてしまいました。UIから再度「sidebar」を出現させる事は難しそうです。Thin divider を選んでユーザーに Collapse させる場合は復活させる、ボタンなりメニューなりが必要そうです。
ちなみに、UISplitView のプロパティから Style が選べるようになっています。「Thick divider」と「Pane splitter」の場合は、collapse した後でも、つまみの部分が残っているので、UIから復活できそうです。
結局、「User can Collapse」の設定があるので、「Collapse」するかしないかは、「Content List」か「Sidebar」かはあまり関係ないようです。
参考までに divider style の違いのスクリーンショットを撮ってみました。
Thin divider
Thick divider
Pane Splitter
まとめ
結局サンプルコードまで、書いて試してみましたが、「Content List」と「Sidebar」の目的や、多少の色の違い以外に違いはわかりませんでした。将来 Apple がドキュメントを更新して、説明がある事を望みます。最後に、GitHub にサンプルコードを置いてみましたので、皆さまも是非お試しいただき、違いに気がついた場合には是非コメントをいただけると幸いです。