그들은 동일하지는 않지만 기능면에서 유사합니다.
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
}
디버거에서 :
,536 여기서 차이의 데모입니다
하위 뷰에 의해 숨겨지기는하지만 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