使用自动布局时如何在加载时滚动UIScrollView

Ben*_*ard 5 cocoa-touch uiscrollview uiviewcontroller ios autolayout

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

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

  • 初始化一个ScrollViewController.这里没有什么事情发生.一个currentPage属性被默认为0.
  • 设置scrollViewController.currentPage为所需的页码.
  • viewDidLoadScrollViewController,阅读self.currentPage和使用scrollToRect或者setContentOffset相应地滚动.

滚动实现看起来很好,因为我在其他地方使用相同的代码跳转到某些页面.但是在第一次加载时,没有任何反应(也就是说,滚动视图不会滚动到所需的页面).

我已经找到了原因 - 看起来contentSize滚动视图(由autolayout推导出来的)在0期间是0 viewDidLoad,这似乎阻止了滚动.在viewWillAppear期间它也是零.仅在viewDidAppear滚动工作中,这当然会产生奇怪的用户体验.

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

Luc*_*rdo 8

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

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    [self setupView];
}
Run Code Online (Sandbox Code Playgroud)