拖动NSSplitView分隔符不会调整视图大小

时间:2018-02-26 07:33:14

标签: swift macos cocoa nssplitview

我正在使用Cocoa,我在代码中创建了我的观点(没有IB),而且我遇到了NSSplitView的问题。

我有一个NSSplitView我在视图控制器中以下列方式配置,在Swift中:

override func viewDidLoad() {
    super.viewDidLoad()
    let splitView = NSSplitView()
    splitView.isVertical = true
    splitView.addArrangedSubview(self.createLeftPanel())
    splitView.addArrangedSubview(self.createRightPanel())
    splitView.adjustSubviews()
    self.view.addSubview(splitView)
    ...
}

结果视图显示NSSplitView的两个子视图和分隔符,一个视图比另一个视图宽。当我拖动潜水员改变宽度时,一旦我松开鼠标,分隔器就会回到原来的位置,就好像被弹簧"拉回来一样。

我无法调整两个子视图的大小;合适的人总是保持固定的大小。但是,在代码中没有任何地方我将该子视图或其任何内容的宽度固定为常量。

我想要实现的是右视图大小不固定,如果我将分隔符拖到中途,子视图将相应调整大小并以相同的宽度结束。

这是问题的屏幕录制:

enter image description here

编辑:这是我设置约束的方法。我使用Carthography,因为除了最简单的情况之外,在代码中设置约束非常冗长。

private func createLeftPanel() -> NSView {
    let view = NSView()
    let table = self.createTable()
    view.addSubview(table)

    constrain(view, table) { view, table in // Cartography magic.
        table.edges == view.edges // this just constraints table.trailing to
                                  // view.trailing, table.top to view.top, etc.
    }
    return view
}

private func createRightPanel() -> NSView {
    let view = NSView()
    let label = NSTextField(labelWithString: "Name of item")
    view.addSubview(label)

    constrain(view, label) { view, label in
        label.edges == view.edges
    }
    return view
}

0 个答案:

没有答案