寻呼机视图控制器的根视图与后续视图控制器的大小不同

时间:2015-04-28 05:30:10

标签: ios cocoa-touch swift pager

我正在使用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

1 个答案:

答案 0 :(得分:0)

你有这个错误,因为DMPagerViewController的子视图不适合父视图,因为没有约束而且没有自动调整掩码来更新它们,这就是为什么bug只出现在DMPagerViewController中而不出现在{{1}中}。 所以要解决这个问题,只需在DMPagerViewController的初始化程序中取消注释这一行:

ViewController

现在,错误已修复,但scrollView的内容高度大于视图高度。

解释

只有当这个方法被调用viewDidLayoutSubviews时才会得到视图的真实帧,并且因为我们在此之前计算了scrollView的内容大小,所以我们得到了一个错误的值。要解决这个问题,我们应该在// _scrollView.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth); viewDidLayoutSubviews中添加一些代码(这两个方法在自动布局完成时调用。),我更喜欢viewDidAppear,因为viewDidAppear被称为多个次。

viewDidLayoutSubviews

您可以找到更多信息here

希望有所帮助