Тень рисуется в "основном" раскадровке, но не в любом другом раскадровке.

Я пытаюсь написать свой собственный comboBox, так как NSComboBox не имеет функций, которые мне нужны.

Итак, я вложил в класс NSTextField и отслеживаю ввод текста, и в зависимости от значения строки, TableView получит свои данные.

Поэтому, когда нужно отобразить TableView, суперпредставление TextFields добавит NSScrollView, отрегулирует его высоту и так далее. Все это прекрасно работает.

Что не очень хорошо, так это DropShadow.

Итак, я создаю новый Xcode-Project в main.Storyboard, добавляю NSTextField и меняю класс на мой подкласс. Как только я набираю текст, появляется TableView с dropShadow.

Затем я создаю новую раскадровку, добавляю новый WindowController и делаю те же шаги, что и в main.Storyboard: добавив NSTextField, измените класс на мой подкласс. Теперь я добавляю кнопку в main.Storyboard, которая имеет действие для представления нового раскадровки.

В новой раскадровке текстовое поле и табличное представление ведут себя, как и ожидалось, за исключением того, что у TableView / ScrollView нет тени.

Даже когда я меняю MainInterface на вкладке Generals на новую раскадровку, DropShadow для TableView отсутствует.

Настройки в IB для обеих раскадровок выглядят одинаково.

Итак, любой намек, как я могу это исправить?

Вот код для добавления и отображения scrollView:

self.scrollView = NSScrollView(frame: NSRect.zero)
self.scrollView!.documentView = self.tableView
self.scrollView!.translatesAutoresizingMaskIntoConstraints = false
self.scrollViewHeightConstraint = NSLayoutConstraint(item: self.scrollView!, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 100)
let topConstraint = NSLayoutConstraint(item: self.scrollView!, attribute: NSLayoutAttribute.top, relatedBy: NSLayoutRelation.equal, toItem: self, attribute: NSLayoutAttribute.bottom, multiplier: 1, constant: 0)
let widthConstraint = NSLayoutConstraint(item: self.scrollView!, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: self, attribute: NSLayoutAttribute.width, multiplier: 1, constant: 0)
let leadinghConstraint = NSLayoutConstraint(item: self.scrollView!, attribute: NSLayoutAttribute.leading, relatedBy: NSLayoutRelation.equal, toItem: self, attribute: NSLayoutAttribute.leading, multiplier: 1, constant: 0)
superview.addSubview(self.scrollView!)
superview.addConstraints([self.scrollViewHeightConstraint!,topConstraint,widthConstraint,leadinghConstraint])

let dropShadow = NSShadow()
dropShadow.shadowColor = NSColor.darkGray
dropShadow.shadowOffset = NSMakeSize(0, 10.0)
dropShadow.shadowBlurRadius = 3.0

self.scrollView!.wantsLayer = true
self.scrollView!.shadow = dropShadow

1 ответ

Решение

После быстрой проверки… я нашел "проблему".

Для нового представления ViewControllers я должен был установить

self.view.wantsLayer = true
Другие вопросы по тегам