2016-10-10 11 views
0

私はUIViewをサブクラス化する際に、適切NSCoderを使用する方法を理解しようとしています:init(coder :)のUIViewのプロパティ(フレームなど)にアクセスできますか?

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
} 

私はaDecoderが運ぶ可能性のあるすべてのプロパティにアクセスすることが可能であるかどうかを疑問に思って。私はビューがストーリーボードに持つframeのサイズを知ることを期待してください。この情報にアクセスすることは可能ですか?私は、次のことを試してみましたが、それは唯一のCGRectのために0値が返されました:

required init?(coder aDecoder: NSCoder) { 
    let frame = aDecoder.decodeCGRect(forKey: "frame") 
    print(frame) // prints: (0.0, 0.0, 0.0, 0.0) 
    super.init(coder: aDecoder) 
} 

私はUIViewdocumentationをチェックするが、これには情報がありません。

+0

おそらく最初のレイアウトパスで変更されます。制約を使用している場合、フレームはコーダー内にありません。なぜあなたは知る必要がありますか?あなたは何を達成しようとしていますか?おそらくそれを行う別の方法があります。 –

+0

は 'super.init()'の後でそれを試しましたが、 '(0.0、0.0、0.0、0.0)'しか表示しません。 'aDecoder'はストーリーボードでビューの設定に関する基本情報を持ちませんか? 'frame'や' backgroundColor'のように 'UIView'のイニシャライザで使うことができますか? – nburk

+0

ストーリーボード内のオブジェクトのフレームが、ストーリーボードで指定されたフレームではなく、制約によって設定される時間の99%。 'backgroundColor'は異なります。これは典型的にはストーリーボードで明示的に設定されるプロパティで、 'super.init'を呼び出した後に利用可能になるはずです。通常、あなたのサブクラスは 'intrinsicContentSize'を介して、それがしたいサイズを指定します – Paulw11

答えて

-1

カスタムビューの実際の寸法が必要な場合は、その後、あなたはあなたのビューのビューコントローラのメソッドになります。

-(void) viewDidLayoutSubviews 

カスタムビューは、それが、これが呼び出されたときに、適切な寸法に設定されます必要があります。

関連する問題