2017-10-04 79 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相关),则滚动中将存在滞后/闪烁。