java controller的生命周期_UIPageViewController的setViewController在childViewController中调用意外的视图生命周期...

在展示ViewController时,我希望视图生命周期符合以下顺序:

viewDidLoad()

viewWillAppear

viewWillLayoutSubviews()

viewDidLayoutSubviews()

viewDidAppear()

注意:4到5之间可以是viewWill / viewDidLayoutSubviews()的更多迭代 . 换句话说,我希望viewDidLayoutSubview在第一个viewDidAppear之前触发 .

为了测试这个,我将一个childViewController添加到一个UIViewController子类,并调用addSubview来添加childViewController的视图 .

override func viewDidLoad() {

super.viewDidLoad()

let childVC = ChildViewController()

self.addChildViewController(childVC)

self.view.addSubview(childVC.view)

}

当我打印出视图方法时,这会产生预期的结果:

viewDidLoad()

viewWillAppear

viewWillLayoutSubviews()

viewDidLayoutSubviews()

viewWillLayoutSubviews()

viewDidLayoutSubviews()

viewDidAppear

当我在UIPageViewController子类上使用setViewController时:

override func viewDidLoad() {

super.viewDidLoad()

let childVC = ChildViewController()

self.setViewControllers([childVC], direction: .forward, animated: true, completion: nil)

}

我总是在第一个LayoutSubviews方法之前执行viewDidAppear:

viewDidLoad()

viewWillAppear

viewDidAppear

viewWillLayoutSubviews()

viewDidLayoutSubviews()

viewWillLayoutSubviews()

viewDidLayoutSubviews()

有人能解释为什么会出现这种情况吗

----进一步观察---

我还在childViewController的日志中添加了willMove和DidMove方法 . 初步测试的结果:

willMove(toParentViewController :)

viewDidLoad()

viewWillAppear

viewWillLayoutSubviews()

viewDidLayoutSubviews()

viewWillLayoutSubviews()

viewDidLayoutSubviews()

viewDidAppear

UIPageViewController的结果:

viewDidLoad()

viewWillAppear

viewDidAppear didMove(toParentViewController :)

viewWillLayoutSubviews()

viewDidLayoutSubviews()

viewWillLayoutSubviews()

viewDidLayoutSubviews()

所以看起来好像setViewController调用了moveToParentViewController,这可能是它之前调用viewDidAppear的原因 .

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值