以autolayout iOS编程方式滚动到特定页面/位置

时间:2015-06-13 04:10:47

标签: ios cocoa-touch uiscrollview autolayout

我正在使用带滚动视图的autolayout。它工作得很好,但我需要能够以编程方式滚动到特定页面。具体来说,我需要在视图加载后滚动到最后一页。我该怎么做呢?我的滚动基本上具有如下所示的可视格式,除了页面数是动态的。

visual format for vertically scrolling (swap V and H for horizontally scrolling):

view hierarchy is scrollContainer(UIView) -> scrollView(UIScrollView) -> contentView(UIView) -> pages(UIView’s)

V:|scrollView|
H:|scrollView|

V:|contentView|
H:|contentView|

V:|[page1(==scrollContainer)][page2(==scrollContainer)][page3(==scrollContainer)]|
H:|[page1(==scrollContainer)]|
H:|[page2(==scrollContainer)]|
H:|[page3(==scrollContainer)]|

编辑:澄清我的问题

用于偏移scrollview的代码如下所示。但是,什么时候可以获取页面的来源,我想使用autolayout滚动到?如果我将它放在viewDidLayoutSubviews中,它会在每次旋转设备时更新。我需要在加载视图时更新。是否有更合适的方法来覆盖?或者有没有办法用约束设置原点?

    let lastPage = pages?.last
    if lastPage != nil {
        let origin = lastPage!.frame.origin
        self.scrollView.setContentOffset(origin, animated: false)
    }

2 个答案:

答案 0 :(得分:1)

如果它是水平滚动视图:

get_the_title()

如果垂直:

CGPoint lastPage = CGPointMake((numberOfPages - 1) * pageWidth, 0.0f);

然后只使用滚动视图的方法:

CGPoint lastPage = CGPointMake(0.0f, (numberOfPages - 1) * pageHeight);

您可以将此代码保留在 [scrollView setContentOffset:lastPage animated:YES]; 中,只需添加一个if语句来测试它是否是第一次:

viewDidLayoutSubviews

答案 1 :(得分:0)

您应该使用:

CGPoint desiredOffset = CGPointMake(0.0,desiredPageNumber * pageHeight);
[self.scrollView setContentOffset:desiredOffset animated:YES];

显然可以根据需要进行调整。我不相信你可以或应该通过动画约束来实现这一点,因为autolayout处理滚动视图的独特方式。