Ful*_*lco 10 uicolor swift ibdesignable ibinspectable xcode9
UIColor.named("myColor")
自Xcode 9问世以来,我在整个应用程序中使用.虽然我在UITextField
一个IBDesignable
类的自定义实现中有一个镜头,但我一直收到以下错误:
错误:IB Designables:无法呈现和更新ViewController()的自动布局状态:代理程序崩溃
此外,我的类有几个IBInspectable
属性,包括类型UIColor
,但在这些属性的Interface Builder下拉列表中,我只能选择标准颜色,我的命名颜色不会像标准类属性那样显示.
以后一个问题作为第一个问题的线索,不满意和临时的解决方案是在我的IBDesignable
课堂上不使用命名颜色.或者,不使用IBDesignable
.
这可能是一个错误,但我想知道其他人是否遇到过这个问题,如果有任何修复,他们会想出来.
[从 Xcode 9.2 开始]这是一个不幸的解决方法,但现在我正在使用特定于 IB 的替代颜色。它并不完美,但我们至少可以在 Interface Builder 中进行设计时看到一些东西。
@IBDesignable
class MyView: UIView {
@IBInspectable
var addCoolSubview: Bool = false {
didSet {
if self.addCoolSubview {
let coolView = CoolView() // Some custom view with a `coolColor` property.
#if TARGET_INTERFACE_BUILDER
coolView.coolColor = UIColor.blue // An IB-only stand-in color.
#else
coolView.coolColor = UIColor(named: "myCoolBlue") // The run-time color we really want.
#endif
self.addSubview(coolView)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
每个UIView
也有一个prepareForInterfaceBuilder()
方法,它只在为 Interface Builder 构建时运行,可以覆盖类似的效果。
@IBDesignable
class MyOtherView: UIView {
var myWarmColor: UIColor? = UIColor(named: "myWarmColor") // Will be `nil` in IB.
// ... view does something with `myWarmColor` that would be visible in IB ...
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
// Set some IB-only stand-in colors here:
self.myWarmColor = UIColor.orange
}
}
Run Code Online (Sandbox Code Playgroud)
关于@IBInspectable
在 Interface Builder中的属性中选择命名颜色,它只是半途而废。作为一种解决方法,您可以从“最近使用的颜色”部分中选择一种命名颜色,前提是您可以通过视觉将其从组中挑选出来。当您选择命名颜色时,它将正确显示名称,但(missing)
无论出于何种原因都会附加。只需忽略(missing)
; 它将在 IB 和运行时正确显示。
另一点需要注意的是 Xcode(从 9.2 开始)可能会尝试再次将命名颜色添加到您的 Storyboard 文件中,因此您必须检查 XML 以查看颜色是否在那里多次定义(颜色定义接近底部)。或者,您可以继续使用,最终 Xcode 会注意到并自行修复它,将重复的颜色定义归咎于 SCM。
归档时间: |
|
查看次数: |
1350 次 |
最近记录: |