【问题标题】:Set NSSplitViewController Pane's Width Using Swift使用 Swift 设置 NSSplitViewController 窗格的宽度
【发布时间】:2016-12-22 20:38:13
【问题描述】:

Xcode 8.2.1、Swift 3.0.2、macOS 10.12

我有一个有 3 个窗格的 NSSplitViewController(请注意 NS;这是针对 Mac 应用程序的)。

我正在尝试将最左侧的窗格设置为始终具有固定宽度且不可调整大小。我尝试了以下方法:

  • 出于某种原因,自动布局约束在窗格子视图的情节提要编辑器中不可用。
  • 设置 constrainMaxCoordinateconstrainMinCoordinate 无效。

最近有其他人让这个工作吗?有很多关于这个主题的文章,但是他们的工具集已经有好几年了,他们的建议都没有对我有用。谢谢!

【问题讨论】:

    标签: macos nssplitview nssplitviewcontroller


    【解决方案1】:

    我终于想通了。我必须以编程方式设置自动布局约束。在情节提要编辑器 (Xcode 8.1) 中对NSSplitViewItem 设置约束不可用

    我是这样做的:

    //This is my SplitViewController subclass
    class MainSplitVC: NSSplitViewController {
    
      //Outlet to the menu pane
      @IBOutlet weak var menuPane: NSSplitViewItem!
    
      override func viewDidLoad() {
        super.viewDidLoad()
    
        //Hard-code the width of the menu pane
        NSLayoutConstraint(item: menuPane.viewController.view, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 80).isActive = true
      }
    }
    

    我希望这对其他人有所帮助。

    【讨论】:

      【解决方案2】:

      通常您应该为子视图的子视图设置布局约束。

      例如,如果您在左侧窗格中有一个 NSOutlineView,只需将其宽度约束设置为固定值即可。

      窗格视图的大小由其子视图的约束计算得出。

      【讨论】:

      • 是的,这与我在上面的回答中所做的基本相同。我们通过menuPane.viewController.view 在子视图控制器的视图上设置宽度约束。 :)
      • 好吧,当你在界面生成器中这样做的时候。
      猜你喜欢
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 2014-12-18
      • 2011-11-09
      相关资源
      最近更新 更多