2

誰かがこれで私を助けてくれることを望んでいました。

IB でもコードでも、新しい NSSplitViewController とその項目を折りたたみ可能にしたり、優先順位を保持したりすることはできません。

このビデオは別の方法で示していますが、インターフェイスビルダーからは実行できません: https://www.youtube.com/watch?v=ZIIuPo4F6tQ

コードで分割ビュー項目を最小幅にすることしかできませんが、これでほとんどです。Swift と Objective-C の両方の実装をテストしましたが、うまくいきませんでした。

これは私が迅速に書いたものです:

override func viewDidLoad() {
    super.viewDidLoad()

    // ---

    var left: NSSplitViewItem = self.splitViewItems[0] as NSSplitViewItem
    var right: NSSplitViewItem = self.splitViewItems[1] as NSSplitViewItem

    // ---

    // NOTE: these are not working properly in the interface builder for now

    self.view.addConstraint(NSLayoutConstraint(
        item: left.viewController.view,
        attribute: NSLayoutAttribute.Width,
        relatedBy: NSLayoutRelation.GreaterThanOrEqual,
        toItem: nil,
        attribute: NSLayoutAttribute.NotAnAttribute,
        multiplier: 0,
        constant: 200
    ))

    self.view.addConstraint(NSLayoutConstraint(
        item: right.viewController.view,
        attribute: NSLayoutAttribute.Width,
        relatedBy: NSLayoutRelation.GreaterThanOrEqual,
        toItem: nil,
        attribute: NSLayoutAttribute.NotAnAttribute,
        multiplier: 0,
        constant: 200
    ))

    // ---

    // NOTE: these are not working in the interface builder neither here but set anyway to demonstrate the problem

    left.canCollapse = true // has no effect
    right.canCollapse = true // has no effect

    // ---

    // NOTE: this is not working in the interface builder neither here but set anyway to demonstrate the problem

    right.holdingPriority = 1.0 // has no effect
}

これはまったく機能しません。関数の一番下にあるスーパーへの呼び出しを動かそうとしましたが、あまり運がありませんでした。

誰かが解決策を特定したのか、それとも私が何か完全に間違っているのか疑問に思っていましたか?

4

1 に答える 1

11
  • NSSplitViewController を NSSplitView のデリゲートにします。たとえば、IB で NSSplitView のデリゲート アウトレットをそのコントローラーに接続します。(これは、IB テンプレートで予想されるように自動的に接続されないようです...)
  • コーディングする代わりに、IB を使用して NSSplitViewItem の保持優先度を変更できます (たとえば、一方が 249 で他方が 250 になるように)。
  • ここでは「Can Collapse」などもチェックできます。
  • また、サブビューの最小サイズの制約を設定するために IB を使用しました。

(1 つの問題: 折りたたんだ後、マウスで折りたたまれたビューを元に戻すことができませんでした。これには、効果的な rect デリゲート メソッドの実装が必要になる場合があります。更新: 効果的な rect は折りたたまれたときに適用されないため、コードで NSSplitViewItem.collapsed を使用すると思われます展開する唯一の方法です。この動作は、「従来の」NSSplitView とは異なります...)

この基本的なセットアップは、特定のコーディングやオーバーライドなしで期待どおりに機能しました。(OS X ストーリーボード アプリ、Swift、Xcode 6.1)

于 2014-11-19T22:09:58.900 に答える