在水平滚动而不是垂直滚动时更改ScrollView页面

时间:2018-04-23 01:08:32

标签: ios iphone swift uitableview uiscrollview

我有一个包含2个UITableViews的滚动视图。换句话说,第0页包含UITableView 0,第1页包含UITableView 1.在视图的顶部,我有一个分段控件。当用户在页面之间滑动时,突出显示的分段控件会发生变化。即当用户在第0页上并且他们更改为第1页时,突出显示的分段控件也会从第0页更改为第1页。

我的问题是,当前页面是" Page 1"我在UITableView中垂直滚动,我的函数将分段控制索引更改为0.如果用户在第1页上并且它们在UITable上垂直滚动,我不希望更改索引。我已经提供了我的功能来改变下面的分段控制索引。

我已经尝试将&& yOffset == 0包含在我的if语句中,但它不起作用,因为我相信Y == 0的时间很短。 非常感谢任何帮助。

感谢。

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    var previousPage : NSInteger = 0
    let pageWidth : CGFloat = scrollView.frame.size.width
    let fractionalPage = Float(scrollView.contentOffset.x / pageWidth)
    let page = lroundf(fractionalPage)
    let yOffset = Float(scrollView.contentOffset.y / pageWidth)

    if previousPage != page {
        previousPage = page
        }

    segments.selectedSegmentIndex = previousPage
    segments(nil)
}

编辑 - 解决方案:

Dhaval D.提供的解决方案完美无缺。在执行页面更改之前,请检查UITableView是否执行了滚动。谢谢你的帮助!

func scrollViewDidScroll(_ scrollView: UIScrollView) {

 // Check whether scrolling is performed by UITableView then ignore page counter related stuff 
 if scrollView != tableView0 && scrollView != tableView1 {
    var previousPage : NSInteger = 0
    let pageWidth : CGFloat = scrollView.frame.size.width
    let fractionalPage = Float(scrollView.contentOffset.x / pageWidth)
    let page = lroundf(fractionalPage)
    let yOffset = Float(scrollView.contentOffset.y / pageWidth)

    if previousPage != page {
        previousPage = page
        }

    segments.selectedSegmentIndex = previousPage
    segments(nil)
 }
}

1 个答案:

答案 0 :(得分:1)

您可以通过匹配UITableView中的scrollViewDidScroll对象来完成此操作,也可以比较您要为其计算PageNo的UIScrollView对象,或者您想要更改细分控制显示当前选择。

func scrollViewDidScroll(_ scrollView: UIScrollView) {

 // Check whether scrolling is performed by UITableView then ignore page counter related stuff 
 if scrollView != tableView0 && scrollView != tableView1 {
    var previousPage : NSInteger = 0
    let pageWidth : CGFloat = scrollView.frame.size.width
    let fractionalPage = Float(scrollView.contentOffset.x / pageWidth)
    let page = lroundf(fractionalPage)
    let yOffset = Float(scrollView.contentOffset.y / pageWidth)

    if previousPage != page {
        previousPage = page
        }

    segments.selectedSegmentIndex = previousPage
    segments(nil)
 }
}