5

viewDidLoad我有一个在 a 的方法中设置的 UIScrollView UIViewController(我称之为 a ScrollViewController)。滚动视图包含水平内容页面(类似于本机天气应用程序)。

显示滚动视图时,应该可以选择它从哪个页面开始。我的模式是这样的:

  • 初始化一个ScrollViewController。这里没什么大事。currentPage属性默认为 0 。
  • 设置scrollViewController.currentPage为所需的页码。
  • viewDidLoadScrollViewController,阅读self.currentPage并使用scrollToRectsetContentOffset相应地滚动。

滚动实现似乎很好,因为我在其他地方使用相同的代码来跳转到某些页面。但是在第一次加载时,什么都没有发生(也就是说,滚动视图没有滚动到所需的页面)。

我找到了原因 - 似乎contentSize滚动视图(由自动布局记住)的 0 期间为 0 viewDidLoad,这似乎阻止了滚动。在 viewWillAppear 期间它也为零。只有viewDidAppear滚动才能起作用,这当然会带来奇怪的用户体验。

我该如何解决这个问题?以某种方式强制布局是否明智viewDidLoad?还是其他方法?

4

2 回答 2

8

viewDidLayoutSubviews就是你要找的。这是完全初始化所有子视图框架的方法。所以,试着在你的 viewController 中调用你的 scrollView 的设置方法:

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    [self setupView];
}
于 2013-08-25T15:09:57.227 回答
0

您应该能够手动设置内容大小。你在哪里插入滚动视图中的页面?我建议将它们插入内部viewDidLoad,或者viewWillAppear在插入它们之后通过设置其contentOffset.

于 2013-08-25T15:10:33.947 回答