LoginSignup
7
5

More than 5 years have passed since last update.

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

Posted at

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)

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5