Тень рисуется в "основном" раскадровке, но не в любом другом раскадровке.
Я пытаюсь написать свой собственный 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