Использование именованных цветов из каталога ресурсов в IBDesignable Views приводит к сбою IB даже при указании Bundle - PullRequest
0 голосов
/ 10 сентября 2018

При ссылке на цвет, созданный с помощью UIColor(named:) Интерфейсный Разработчик падает, из-за того, что он завершает ноль для цвета.

Первоначально я думал, что это будет, поскольку IB искал цвет в неправильном пакете, но после указания Связки для просмотра в IB все еще не мог найти цвет.

Это нормально работает во время выполнения на устройстве / симуляторе.

extension UIColor {

    // MARK: - Oranges
    static let tangerine = UIColor(named: "Tangerine", in: Bundle(for: AppDelegate.self), compatibleWith: nil)!
    .....
}

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

po Bundle(for: AppDelegate.self)
NSBundle </Users/me/Library/Developer/Xcode/DerivedData/MyApp-ddspmruccrhrxhbawgwawhzkrrts/Build/Intermediates.noindex/IBDesignables/Products/Debug - DEV-iphonesimulator/MyApp.app> (loaded)`

xcrun --sdk iphoneos assetutil --info pathToAsserts.car

  {
"AssetType" : "Color",
"Color components" : [
  1,
  1,
  1,
  1
],
"Colorspace" : "srgb",
"Idiom" : "universal",
"Name" : "Marmalade",
"Scale" : 1
},
{
"AssetType" : "Image",
"BitsPerComponent" : 8,
"ColorModel" : "RGB",
"Colorspace" : "srgb",
"Compression" : "lzfse",
"Encoding" : "ARGB",
"Idiom" : "universal",
"Image Type" : "kCoreThemeOnePartScale",
"Name" : "sweets",
"Opaque" : false,
"PixelHeight" : 412,
"PixelWidth" : 324,
"RenditionName" : "sweets@2x.png",
"Scale" : 2,
"SizeOnDisk" : 132830
},

Редактировать: Оказывается, достаточно указать пакет, как указано выше. Очистка папки сборки, удаление производных данных и перезапуск XCode заставили все работать как положено

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Одна вещь, которую я заметил, боролась с этим: если ваши шрифты находятся в основном комплекте, использование Bundle.main не работает, но использование Bundle(for: AppDelegate.self) (или некоторого другого класса в вашего основного пакета) делает ,

Возможно, что-то связано с тем, как IBDesignablesAgent загружает все в свой процесс, но я определенно не ожидал этого.

0 голосов
/ 12 сентября 2018

Оказывается, это был просто Xcode. Очистка папки сборки, производных данных и перезапуск XCode исправили проблему (при указании правильного пакета, как показано в моем фрагменте кода).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...