loadView()
메서드에서 사용자 지정보기를 프로그래밍 방식으로 설정하여 내 View Controller를 작성했습니다. AppDelegate
에있는 루트보기 컨트롤러를 지정된보기 컨트롤러로 변경하는 동안보기 컨트롤러가 올바르게 배치 된 하위보기를 표시하지 않는다는 것을 알았습니다. 보기 디버거를 사용하여보기가 뷰 계층에있는 것으로 간주되지만 찾을 수있는 위치가 없으므로 빈보기 컨트롤러로 끝납니다. 이상한 점은 다른 뷰 컨트롤러에서 뷰 컨트롤러를 대신 제시 할 때만 그 뷰가 올바르게 배치되고 모든 뷰가 표시된다는 것입니다. 내 View Controller는 모두 아래에 표시된 것과 동일한 생성을 따릅니다. 내보기 컨트롤러 내 사용자 정의보기를 만드는 오전 방법은 다음과 루트보기 컨트롤러로 프로그래밍 방식으로 설정된 경우보기 컨트롤러가 하위보기를 올바르게 표시하지 않음
class ViewController: UIViewController {
private var rootView: View? {
get { return self.viewIfLoaded as? View ?? .none }
set (view) { self.view = view }
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
init() {
super.init(nibName: nil, bundle: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func loadView() {
self.rootView = View()
}
}
그리고 내가 내 AppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.backgroundColor = Palette.backgroundColor
window?.rootViewController = MyViewController()
window?.makeKeyAndVisible()
return true
}
의 루트 뷰 컨트롤러를 설정하고 방법
다음
class View: UIView {
// Lazy declare views here
fileprivate var shouldSetupConstraints = true
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupView()
}
override func updateConstraints() {
if(shouldSetupConstraints) {
// Adding constraints here
shouldSetupConstraints = false
}
super.updateConstraints()
}
func setupView() {
// Adding subviews here
}
}
이입니다
프로그래밍 방식으로 배치 된보기 컨트롤러가 루트로 설정되어있는 동안 제대로 표시 될 것으로 기대합니다. 뷰 컨트롤러가 아니라 뷰가 보이지 않거나 제대로 배치되지 않습니다. 보기 컨트롤러가 다른보기 컨트롤러에 의해 표시 될 때만 올바르게 표시됩니다. 이 동작은 내 사용자 정의보기에 setupView()
에서
self.translatesAutoresizingMaskIntoConstraints = false
을 설정하지 않음으로써 발생되는 것처럼