2013-08-25 138 views
5

我有一个UIScrollView设置在viewDidLoad方法UIViewController(我将其称为ScrollViewController)。滚动视图包含水平内容页面(类似于本地天气应用)。如何使用自动布局在载入时滚动UIScrollView

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

  • init a ScrollViewController。这里没有什么发生。 A currentPage属性默认为0.
  • scrollViewController.currentPage设置为所需的页码。
  • viewDidLoadScrollViewController,读self.currentPage并使用scrollToRectsetContentOffset相应地滚动。

滚动实现看起来很好,因为我在其他地方使用相同的代码跳转到某些页面。但在第一次加载时,没有任何事情发生(即,滚动视图不滚动到所需的页面)。

认为我已经找到了原因 - 它似乎是滚动视图的contentSize(这是由自动版式衍生记住)期间viewDidLoad是0,这似乎这防止滚动。在viewWillAppear期间它也是零。只有在viewDidAppear的滚动工作,这当然使奇怪的用户体验。

我该如何解决这个问题?以某种方式强制布局viewDidLoad是明智的吗?或者其他一些方法?

回答

8

viewDidLayoutSubviews是你在找什么。这是所有子视图帧都完全初始化的方法。因此,请尝试在您的viewController中调用您的scrollView的设置方法:

-(void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    [self setupView]; 
} 
0

您应该可以手动设置内容大小。你在哪里插入滚动视图内的页面?我建议将它们插入viewDidLoadviewWillAppear,然后通过设置其contentOffset插入它们后滚动到所需的页面。

相关问题