2016-11-16 14 views
0

Я хочу использовать более высокий (27pt) вид в качестве разделителя для NSSplitView, который вертикально уложен (splitView.isVertical = false). Есть ли способ сделать это? Если нет, есть обычный хак?Могу ли я использовать пользовательский вид в качестве разделителя NSSplitView?

Я думал о том, чтобы использовать тонкий делитель и прислушиваться к перетаскиванию мышью в пользовательском представлении и использовать их для программного изменения положения разделителя. Действительно ли это правильный подход?

+0

Возможно, у делегата есть некоторые способы сделать это? Ты проверил? – Willeke

+0

@Willeke ['NSSplitViewDelegate'] (https://developer.apple.com/reference/appkit/nssplitviewdelegate) содержит нулевые функции, которые возвращают' NSView' или аналогичные –

+0

Как насчет 'splitView (_: effectiveRect: forDrawnRect: ofDividerAt:) 'и' splitView (_: дополнительнаяEffectiveRectOfDividerAt:) '? – Willeke

ответ

1

подход, который не требует прослушивания мышь тащит или любое активное обновление зрения заключается в использовании автоматической раскладки:

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) 

Автоматическая компоновка позаботится об обновлении положения разделителя, когда пользователь перетащит.

+0

Привет, вы знаете, что делает arrangesAllSubviews? Мое приложение рушится с этим, но с этим я получаю предупреждение, которое выключено –