2017-10-04 91 views
0

我有一個RootViewController由兩個UIViewControllers在代碼中創建(沒有Storyboard/Nibs)。UIPageViewController與自動佈局不更新childs框架,直到viewDidAppear

第一UIViewController中有如下錨:

weekView.translatesAutoresizingMaskIntoConstraints = false 

weekView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
weekView.heightAnchor.constraint(equalToConstant: 100).isActive = true 
weekView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true 
weekView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true 

其他的UIViewController具有以下主播:

daysViewController.view.translatesAutoresizingMaskIntoConstraints = false 

daysViewController.view.topAnchor.constraint(equalTo: weekView.bottomAnchor).isActive = true 
daysViewController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true 
daysViewController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true 
daysViewController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true 

這使得其固定在第一個的UIViewController的底部,並採取了休息屏幕高度(頂部UIViewController爲-100)。

第二個UIViewController是一個由UIViewControllers的多個子視圖組成的自定義UIPageViewController。

問題

對於通過在UIPageViewController頁面滾動每個孩子的ViewController有不正確的幀高度時(例如不相同的高度約束告訴它有)的一些原因。 框架高度與屏幕高度相同。

在三種不同的狀態的印刷框架的高度如下:

viewDidLoad PageViewController frame: (0.0, 0.0, 375.0, 667.0) 
viewDidLoad ChildViewController frame: (0.0, 0.0, 375.0, 667.0) 
viewWillAppear ChildViewController frame: (0.0, 0.0, 375.0, 667.0) 
viewDidAppear ChildViewController frame: (0.0, 0.0, 375.0, 667.0) 

我需要的567正確的幀大小在viewDidLoad中這麼晚正確地和不佈局子視圖作爲viewDidAppear。

我該如何解決這個問題? 因爲現在我需要考慮到視圖框架是屏幕的整個高度,而不是創建所有子視圖時的567。

回答

0

找到我的答案在similar question

曾與自動排版引擎,當它開始做。 該框架在viewWillAppear和viewDidAppear之間是正確的,這使得我在viewDidLayoutSubviews中放置了框架特定的代碼。

但是,如果在viewDidLayoutSubviews中調用的幀特定任務很重(例如UI相關),則滾動中將存在滯後/閃爍。