2017-08-11 6 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をフックアップし、直接このような色を設定しようとしました::(私はそれになりたいと)白に変更されません

私は前回の大きなアップデート(iOSの10)でフレームのレンダリングは基本的に(1000×1000フレームの事を)変更されたことを知っているので
submitButton.layer.borderColor = UIColor.white.cgColor 

viewDidLoadviewWillAppearviewDidAppearでそれをやったし、おそらくいくつかの同様の変更が今ありました。しかし、運はありません。

私はiOS 9,10、および11でテストしました。これはOSについてではなく、環境に関するものです。私はXcode 9ベータ5を使用しています。どのようにそれを解決するためのアイデア?

+1

これはXcode 9の問題であることをどのように確認しましたか? –

+0

self.submitButton.layer.masksToBounds = trueを試してください – iParesh

+0

@の意味 - Xcode 8で実行されているのと同じコードが完全に機能します。 – PaulRBerg

答えて

3

プロジェクトをクリアし、派生データを削除し、コードはviewDidLoadviewWillAppearまたはviewDidAppearのいずれかになりました。

明らかに問題は、ユーザー定義の実行時属性です。 Xcode 9では、ここで拡張子を受け入れなくなりました。または、少なくとも、Beta 5バージョン。

+0

@objcを変数宣言に追加すると、拡張機能で宣言されていても問題が修正されます。 –

6

そうのような@objcであなたのvar宣言を飾るしてみてください:あなたの問題を解決する必要があり

@objc var borderUIColor: UIColor { 
... 
} 

0

ちょうど同じ問題に直面して、別の解決策を得た:私はちょうど私のクラスのKVC準拠を作りました。

サンプル、ステップ・バイ・ステップ:

  • カスタムクラスプロパティpropIdentifierとXTCMenuItem、です。 KVC準拠のために
  • 、このクラスの二つの方法だ:
    • オーバーライドFUNC値(forKeyキー:文字列) - >どれ?
    • オーバーライドのfuncのsetValue(_値: どれ?forKeyキー:文字列)アイデンティティインスペクタで
  • 、私は "XTCMenuItem" にカスタムクラス を設定し、ユーザー定義のランタイム属性 "propIdentifier" を追加タイプ "String"、および文字列値を使用します。
-1

@IBInspectable属性を使用します。 例:

@IBInspectable var borderColor = UIColor.green 
0

あなたはそれがあなたの問題を解決します@objc、あなたはIBDesignableとセット接頭辞を使用することができ、IBOutletを作成し、ちょうどランタイムは属性を使用したくない場合。

@objc @IBInspectable var borderColor: UIColor { 

    get { 
     return UIColor(cgColor: self.layer.borderColor!) 
    } 
    set { 
     self.layer.borderColor = newValue.cgColor 
    } 
} 
関連する問題