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)
}
私はUIView
のdocumentationをチェックするが、これには情報がありません。
おそらく最初のレイアウトパスで変更されます。制約を使用している場合、フレームはコーダー内にありません。なぜあなたは知る必要がありますか?あなたは何を達成しようとしていますか?おそらくそれを行う別の方法があります。 –
は 'super.init()'の後でそれを試しましたが、 '(0.0、0.0、0.0、0.0)'しか表示しません。 'aDecoder'はストーリーボードでビューの設定に関する基本情報を持ちませんか? 'frame'や' backgroundColor'のように 'UIView'のイニシャライザで使うことができますか? – nburk
ストーリーボード内のオブジェクトのフレームが、ストーリーボードで指定されたフレームではなく、制約によって設定される時間の99%。 'backgroundColor'は異なります。これは典型的にはストーリーボードで明示的に設定されるプロパティで、 'super.init'を呼び出した後に利用可能になるはずです。通常、あなたのサブクラスは 'intrinsicContentSize'を介して、それがしたいサイズを指定します – Paulw11