подход, который не требует прослушивания мышь тащит или любое активное обновление зрения заключается в использовании автоматической раскладки:
1. Override dividerThickness
вернуть идеальную толщину.
2. Переопределить dividerColor
, чтобы вернуть сообщение, если ваш пользовательский вид не является непрозрачным, и если вы не хотите, чтобы серый цвет по умолчанию показывался.
Если у вас есть минимальный уровень развертывания 10.11 или более поздней версии:
3a. Установите arrangesAllSubviews
в НЕТ на вид разделения, а затем добавьте пользовательский вид разделителя в качестве подзаголовка в режиме разделения. (Без установки arrangesAllSubviews
к NO, добавив вид пользовательского разделительную бы добавить его в качестве разделенной панели)
В противном случае, если минимальная цель развертывания < 10,11 (или в противном случае вы не можете установить arrangesAllSubviews
к NO):
3b. Добавьте ваш пользовательский делитель как подвид контейнера в целях раскола, но убедившись, что она выше в подвид/г порядка
4. Добавить ограничения в положение этой точки зрения, где делитель будет, например:
let constraints = [dividerView.topAnchor.constraint(equalTo: topPane.bottomAnchor),
dividerView.bottomAnchor.constraint(equalTo: topPane.bottomAnchor),
dividerView.leadingAnchor.constraint(equalTo: splitView.leadingAnchor),
dividerView.trailingAnchor.constraint(equalTo: splitView.trailingAnchor)]
NSLayoutConstraint.activate(constraints)
Автоматическая компоновка позаботится об обновлении положения разделителя, когда пользователь перетащит.
Возможно, у делегата есть некоторые способы сделать это? Ты проверил? – Willeke
@Willeke ['NSSplitViewDelegate'] (https://developer.apple.com/reference/appkit/nssplitviewdelegate) содержит нулевые функции, которые возвращают' NSView' или аналогичные –
Как насчет 'splitView (_: effectiveRect: forDrawnRect: ofDividerAt:) 'и' splitView (_: дополнительнаяEffectiveRectOfDividerAt:) '? – Willeke