Установка ширины панели NSSplitViewController с помощью Swift
Xcode 8.2.1, Swift 3.0.2, macOS 10.12
у меня есть NSSplitViewController
который имеет 3 панели (обратите внимание на NS
; это для приложения Mac).
Я пытаюсь установить крайнюю левую панель, чтобы она всегда имела фиксированную ширину и не меняла размеры. Я пробовал следующее:
- По некоторым причинам автоматические ограничения макета недоступны в редакторе раскадровки в дочернем представлении панели.
- настройка
constrainMaxCoordinate
а такжеconstrainMinCoordinate
не работал
Кто-нибудь еще заставил это работать в последнее время? Есть много статей на эту тему, но их инструментам уже несколько лет, и ни одно из их предложений не сработало для меня. Спасибо!
3 ответа
Я наконец понял это. Я должен был установить ограничение автоматического макета программно. Установка ограничения на NSSplitViewItem
не был доступен в редакторе раскадровки (Xcode 8.1).
Вот как я это сделал:
//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
}
}
Я надеюсь, что это помогает кому-то еще.
Если вы не используете ограничения макета для установки шириныNSSplitViewItem
, вы можете использовать такой код:
splitViewController.splitView.setPosition(600, ofDividerAt: 0)
Обычно вы должны установить ограничения макета для дочерних представлений дочернего представления.
Например, если у вас есть NSOutlineView на левой панели, просто установите для его ограничения ширины фиксированное значение.
Размер представления панели рассчитывается с учетом ограничений его подпредставлений.