gpt4 book ai didi

ios - Pager View Controller 的 Root View 的大小与后续 View Controller 的大小不同

转载 作者:搜寻专家 更新时间:2023-11-01 05:41:17 28 4
gpt4 key购买 nike

我正在使用 DMPagerViewController,但我尝试使用其他的,它们似乎都有相似的行为。

我设置了一个 git 来尝试了解发生了什么:https://github.com/LucasCoelho/DMPager-Example

基本上我从 Storyboard 中添加了两次 ViewController 到 DMPagerViewController 并将其设置为 UINavigationControllerrootViewController窗口的 rootViewController

View Controller 包含一个 UIButton 用于推送同一 ViewController 的另一个实例,以及一个在 viewWillAppear(_:) 中设置的显示 View 的标签。 frame.size.height

我遇到的问题是显示的第一个 View 的高度与推送的后续 View 不匹配。

谁能告诉我为什么?

如果你不想在github上下载,这里有一些代码:

App Delegate 的 application:didFinishLaunchingWithOptions

pagerController = DMPagerViewController(viewControllers:[firstViewController, secondViewController])

let navController = UINavigationController(rootViewController: pagerController)
navController.navigationBar.translucent = false

window?.rootViewController = navController

最佳答案

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

//   _scrollView.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);

现在,bug 已修复,但 scrollView 的内容高度大于 View 高度。

解释:

只有在调用此方法时,我们才能获得 View 的真实框架viewDidLayoutSubviews ,又因为我们之前计算过scrollView的content size,所以得到的值是错误的。为了解决这个问题,我们应该在 viewDidLayoutSubviewsviewDidAppear 中添加一些代码(这两个方法在自动布局完成时调用。),我更喜欢 viewDidAppear因为 viewDidLayoutSubviews 被多次调用。

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];

[self adjustControllerLayout];
[self adjustPagerNavigationBarOnScroll];
}

您可以找到更多信息here

希望对你有帮助

关于ios - Pager View Controller 的 Root View 的大小与后续 View Controller 的大小不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29911023/

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