我正在使用DMPagerViewController
,但我尝试使用其他版本,但它们似乎都有类似的行为。
我设置了一个git,试图了解发生了什么:https://github.com/LucasCoelho/DMPager-Example
基本上我从故事板中添加了两次ViewController到DMPagerViewController
,并将其设置为rootViewController
UINavigationController
的{{1}}窗口的rootViewController
视图控制器包含一个UIButton
,它推送同一个ViewController的另一个实例以及一个设置为viewWillAppear(_:)
且显示view.frame.size.height
的标签
我正在努力的是,所显示的第一个视图的高度与后续推送的视图不匹配。
有谁能告诉我为什么?
如果你不想在github上下载这些代码:
App Delegate's application:didFinishLaunchingWithOptions
pagerController = DMPagerViewController(viewControllers:[firstViewController, secondViewController])
let navController = UINavigationController(rootViewController: pagerController)
navController.navigationBar.translucent = false
window?.rootViewController = navController
答案 0 :(得分:0)
你有这个错误,因为DMPagerViewController的子视图不适合父视图,因为没有约束而且没有自动调整掩码来更新它们,这就是为什么bug只出现在DMPagerViewController中而不出现在{{1}中}。 所以要解决这个问题,只需在DMPagerViewController的初始化程序中取消注释这一行:
ViewController
现在,错误已修复,但scrollView的内容高度大于视图高度。
解释:
只有当这个方法被调用viewDidLayoutSubviews时才会得到视图的真实帧,并且因为我们在此之前计算了scrollView的内容大小,所以我们得到了一个错误的值。要解决这个问题,我们应该在// _scrollView.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);
或viewDidLayoutSubviews
中添加一些代码(这两个方法在自动布局完成时调用。),我更喜欢viewDidAppear
,因为viewDidAppear
被称为多个次。
viewDidLayoutSubviews
您可以找到更多信息here
希望有所帮助