gpt4 book ai didi

ios - 具有自动布局的 UIPageViewController 在 vi​​ewDidAppear 之前不会更新子框架

转载 作者:行者123 更新时间:2023-11-30 12:06:56 25 4
gpt4 key购买 nike

我有一个 RootViewController,它由两个 UIViewController 组成,全部在代码中创建(没有 Storyboard/Nib)。

第一个 UIViewController 有以下 anchor :

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 有以下 anchor :

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 的多个 subview 组成。

问题

由于某种原因,当滚动 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 来正确布局 subview ,而不是像 viewDidAppear 中那样晚。

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

最佳答案

similar question 中找到了我的答案

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

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

关于ios - 具有自动布局的 UIPageViewController 在 vi​​ewDidAppear 之前不会更新子框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46575346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com