Представление IBDesignable не отображается

У меня есть простое представление @IBDesignable, которое я указал в качестве базового класса для представления верхнего уровня в сцене в моей раскадровке macOS. Например:

@IBDesignable
class OvalView: NSView {
    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)

        NSColor.red.setFill()
        NSBezierPath(ovalIn: bounds).fill()
    }
}

Когда я запускаю приложение, это представление отображается нормально. Но это настраиваемое представление не отображается в моей сцене в Interface Builder:

введите здесь описание изображения

Обратите внимание, что эта проблема проявляется только тогда, когда рассматриваемый вид является видом верхнего уровня сцены. Если я делаю это для подвидов, все работает нормально:

введите здесь описание изображения


person Rob    schedule 11.08.2016    source источник
comment
Это старый пост, но с XCode 10.2.1 теперь это работает.   -  person Jay    schedule 09.06.2019
comment
Странный. Это определенно работает для меня. И цвет, и размер кисти меняются, когда я изменяю эти свойства в Инспекторе IB.   -  person Jay    schedule 09.06.2019
comment
К сожалению, я неправильно понял вопрос в данном случае, а именно то, что проблема проявляется только при работе с видом верхнего уровня. На самом деле проблема все еще сохраняется в Xcode 10.2.1 и Xcode 11.   -  person Rob    schedule 09.06.2019
comment
Приношу свои извинения, если неправильно понял выражение «вид сверху» — его можно рассматривать в нескольких разных контекстах. Означает ли «представление верхнего уровня» представление содержимого NSViewControllers? например на раскадровке вид окна viewControllers? У меня похожая проблема, хочу уточнить.   -  person Jay    schedule 09.06.2019
comment
Смотрите снимки в пересмотренном вопросе.   -  person Rob    schedule 09.06.2019


Ответы (1)


Проблема заключается в том, что построитель интерфейсов не отображает должным образом представление @IBDesignable macOS в построителе интерфейса, если это представление является представлением верхнего уровня в сцене. Это будет в iOS, но не в macOS. В macOS он отображает проектируемое представление в Interface Builder только в том случае, если это подпредставление, но не представление верхнего уровня.

Я подал отчет об ошибке. #27817119

person Rob    schedule 11.08.2016
comment
Я получил обновление, что этот отчет об ошибке был дубликатом предыдущего. Таким образом, Apple, по крайней мере, знает об этой проблеме. - person Rob; 27.08.2016
comment
Эта ошибка все еще существует в XCode 8.3 :( - person Alnitak; 04.04.2017
comment
Все еще здесь, в Xcode 11.5 в июне 2020 года. Немного бесит. - person jeff-h; 04.07.2020