【问题标题】:Xcode 9 borderColor doesn't work in User Defined Runtime AttributesXcode 9 边框颜色在用户定义的运行时属性中不起作用
【发布时间】:2018-01-19 16:00:58
【问题描述】:

我正在使用这个CALayer 扩展:

var borderUIColor: UIColor {
    set {
        self.borderColor = newValue.cgColor
    }

    get {
        return UIColor(cgColor: self.borderColor!)
    }
}

我想也许是因为这个扩展,我的页面底部提交按钮的borderColor 没有变为白色(如我所愿):

但是没有,我连接了一个IBOutlet 并尝试像这样直接设置颜色:

submitButton.layer.borderColor = UIColor.white.cgColor

viewDidLoadviewWillAppearviewDidAppear 中做到了,因为我知道在上一次重大更新(iOS 10)中,帧渲染发生了根本性的变化(1000x1000 帧的东西),也许现在有一些类似的改变.不过运气不好。

我在 iOS 9、10 和 11 中进行了测试。这与操作系统无关,而与环境有关。我正在使用 Xcode 9 Beta 5。任何想法如何解决它?

【问题讨论】:

  • 您如何确认这只是 Xcode 9 的问题?
  • 试试 self.submitButton.layer.masksToBounds = true
  • @meaning-matters 在 Xcode 8 中运行的相同代码可以完美运行。
  • @iParesh 感谢您的提示,但颜色仍然是黑色。
  • 你给borderWidth了吗?

标签: ios calayer ios11 xcode9-beta xcode9


【解决方案1】:

清除项目,删除派生数据,代码现在可以在viewDidLoadviewWillAppearviewDidAppear 中运行。

问题显然在于用户定义的运行时属性。 Xcode 9 在这里不再接受扩展变量。或者,至少是 Beta 5 版本。

编辑:确实,添加 @objc 可以解决问题。

【讨论】:

  • 将@objc 添加到变量声明中可以解决问题,即使它是在扩展中声明的。
【解决方案2】:

尝试使用@objc 装饰您的 var 声明,如下所示:

@objc var borderUIColor: UIColor {
...
}

应该可以解决你的问题

【讨论】:

    【解决方案3】:

    刚刚遇到同样的问题,并得到了另一个解决方案:我刚刚让我的课程符合 KVC。

    示例,一步一步:

    • 自定义类为 XTCMenuItem,属性为 propIdentifier。
    • 为了符合 KVC,这个类有两种方法:
      • override func value(forKey key: String) -> Any?
      • 覆盖 func setValue(_ value: 有吗?,forKey key: String)
    • 在 Identity Inspector 中,我设置了自定义类 到“XTCMenuItem”,并添加用户定义的运行时属性 类型为“String”的“propIdentifier”和一个字符串值。

    【讨论】:

      【解决方案4】:

      使用@IBInspectable 属性。 示例:

      @IBInspectable var borderColor = UIColor.green
      

      【讨论】:

        【解决方案5】:

        如果您不想创建 IBOutlet 而只使用 RunTime 属性,那么您可以使用 IBDesignable 并设置前缀 @objc 它将解决您的问题。

        @objc @IBInspectable var borderColor: UIColor {
        
           get {
              return UIColor(cgColor: self.layer.borderColor!)
           }
           set {
              self.layer.borderColor = newValue.cgColor
           }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-08
          • 2015-05-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-31
          相关资源
          最近更新 更多