2017-08-11 23 views
0

我使用這個CALayer擴展:的Xcode 9 BORDERCOLOR不會在用戶定義的運行期屬性

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

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

我想,也許是因爲這個擴展的我從頁面底部的提交按鈕的borderColor不更改爲白色(因爲我希望它是):

enter image description here

不過沒有關係,我迷上了一個IBOutlet,並試圖直接設置顏色像這樣:

submitButton.layer.borderColor = UIColor.white.cgColor 

這麼做是viewDidLoadviewWillAppearviewDidAppear,因爲我知道,在過去的大更新(iOS版10)的幀渲染爲從根本上改變(1000×1000的框架的東西),也許有一些類似的改變了。雖然沒有運氣。

我在iOS 9,10和11中測試過。它不是關於操作系統,而是關於環境。我正在使用Xcode 9 Beta 5.任何想法如何解決它?

+1

你是如何驗證它只是一個Xcode 9的問題? –

+0

嘗試self.submitButton.layer.masksToBounds = true – iParesh

+0

@意義 - 事情在Xcode 8中運行相同的代碼完美地工作。 – PaulRBerg

回答

3

viewDidLoad,viewWillAppearviewDidAppear中清除了項目,刪除了派生數據並且代碼現在可以工作。

該問題顯然與用戶定義運行屬性。 Xcode 9不再接受擴展變量。或者至少,Beta 5版本。

+0

將@objc添加到變量聲明可以修復問題,即使它是在擴展中聲明的。 –

6

嘗試@objc裝飾你的VAR聲明,如下所示:

@objc var borderUIColor: UIColor { 
... 
} 

應該解決您的問題

0

就面臨着同樣的問題,並得到了另一種解決方案:我只是做了兼容KVC我的課。

樣品,一步一步:

  • 自定義類是XTCMenuItem,財產propIdentifier。
  • 對於KVC遵守,這個類有兩種方法:
    • 覆蓋FUNC值(forKey鍵:字符串) - >所有?
    • 倍率FUNC的setValue(_值: 不限?, forKey鍵:字符串)
  • 在Identity檢查,我設置自定義類 爲 「XTCMenuItem」,並添加用戶定義的運行時屬性 「propIdentifier」類型爲「String」和一個字符串值。
-1

使用@IBInspectable屬性。 例子:

@IBInspectable var borderColor = UIColor.green 
0

如果您不希望創建IBOutlet中,只是使用運行時屬性,那麼你可以使用IBDesignable並設置前綴@objc它會解決你的問題。

@objc @IBInspectable var borderColor: UIColor { 

    get { 
     return UIColor(cgColor: self.layer.borderColor!) 
    } 
    set { 
     self.layer.borderColor = newValue.cgColor 
    } 
} 
相關問題