2017-12-05 21 views
0

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
을 설정하지 않음으로써 발생되는 것처럼

답변

0

보인다.