【问题标题】:How to scroll a UIScrollView on load when using auto layout使用自动布局时如何在加载时滚动 UIScrollView
【发布时间】:2013-08-28 02:55:20
【问题描述】:

我在UIViewControllerviewDidLoad 方法中设置了一个UIScrollView(我称之为ScrollViewController)。滚动视图包含水平内容页面(类似于原生天气应用)。

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

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

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

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

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

【问题讨论】:

    标签: ios cocoa-touch uiviewcontroller uiscrollview autolayout


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您应该能够手动设置内容大小。在滚动视图中插入页面的位置是什么?我建议将它们插入到viewDidLoadviewWillAppear 中,然后通过设置contentOffset 在插入它们之后滚动到所需的页面。

      【讨论】:

        猜你喜欢
        • 2015-04-16
        • 2013-12-17
        • 2016-06-12
        • 1970-01-01
        • 1970-01-01
        • 2011-04-11
        • 2016-04-01
        • 1970-01-01
        • 2013-08-03
        相关资源
        最近更新 更多