これらは同一ではありませんが機能的には類似しています。ここでの違いのデモです:
デバッガで
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.blue
let sceneView = UIView(frame: self.view.frame)
sceneView.backgroundColor = UIColor.red
self.view.addSubview(sceneView)
}
:
は交換と比較:
デバッガで
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.blue
let sceneView = UIView(frame: self.view.frame)
sceneView.backgroundColor = UIColor.red
self.view = sceneView
}
:
これは、サブビューによって隠されていますが、sceneViewがサブビューとして追加されても、元の青いビューはビュー階層内にあることがわかります。ただし、ビューを置き換えると、元の青いビューはもはやビュー階層の一部になりません。
注:viewDidLoad()をrmaddyに置き換えるのではなく、loadView()でビューを設定したい場合は、このようなものが動作するはずです。そのトリックは適切なフレームを取得しています。たとえば、ナビゲーションコントローラの場合、フレームは異なります。
override func loadView() {
let sceneView = UIView(frame: UIScreen.main.bounds)
sceneView.backgroundColor = UIColor.red
self.view = sceneView
}
これは意味を成していますが、どちらのプロセスがより良い方法ですか、あるいはこのプロセスが開発者としての私の心配の中で最小限に抑えるべきでしょうか? –
正直なところ、どちらにしても大したことではありません。技術的にビューを自分のビューに置き換えると、ビューの階層が単純になりますので、私は一般的にそのアプローチを推奨しますが、Appleには公式の姿勢があることはわかりません。 –
'viewDidLoad'に' view'を再割り当てしないでください。 'view'プロパティにカスタムビューを割り当てる場合は、' loadView'をオーバーライドしてそれを行います。 – rmaddy