【问题标题】:UIPageViewController with Auto-Layout doesn't update childs frame until viewDidAppear具有自动布局的 UIPageViewController 在 vi​​ewDidAppear 之前不会更新子框架
【发布时间】:2018-03-16 11:11:12
【问题描述】:

我有一个 RootViewController,它由两个 UIViewController 组成,它们都是用代码创建的(没有 Storyboard/Nibs)。

第一个 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 是一个自定义的 UIPageViewController,它由 UIViewController 的多个子视图组成。

问题

由于某种原因,在 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)

我需要 viewDidLoad 中正确的 567 帧大小来正确布局子视图,而不是像在 viewDidAppear 中那样晚。

我该如何解决这个问题? 因为现在我需要考虑到视图框架是屏幕的全高,而不是在创建所有子视图时应该是 567。

【问题讨论】:

    标签: ios swift uiviewcontroller frame


    【解决方案1】:

    similar question 中找到我的答案

    与自动布局引擎及其启动时间有关。 框架在 viewWillAppear 和 viewDidAppear 之间是正确的,这使我将框架特定代码放在 viewDidLayoutSubviews 中。

    但是,如果在 viewDidLayoutSubviews 中调用的特定于框架的任务很重(例如与 UI 相关),则滚动会出现延迟/闪烁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 2019-03-10
      • 1970-01-01
      相关资源
      最近更新 更多