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

标签 ios iphone swift uitableview uiscrollview

我有一个包含 2 个 UITableView 的 ScrollView 。换句话说,第 0 页包含 UITableView 0,第 1 页包含 UITableView 1。在 View 的顶部,我有一个分段控件。当用户在页面之间滑动时,突出显示的分段控件会发生变化。 IE。当用户在第 0 页并转到第 1 页时,突出显示的分段控件也从第 0 页变为第 1 页。

我的问题是,当当前页面是“第 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)
 }
}

最佳答案

您可以通过在您的 scrollViewDidScroll 中匹配您的 UITableView 对象来做到这一点,如下所示,或者您可以比较您想要的 UIScrollView 对象计算 PageNo 或您想更改段控制以显示当前选择。

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)
 }
}

关于ios - 水平滚动而不是垂直滚动时更改 ScrollView 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49972177/

相关文章:

swift - 查找 Swift String 中所有 Substring 实例的有效方法

ios - 如何自动布局约束按钮内的通知标签?

iphone - 可以传递给 ios 中的着色器的统一数组的最大大小是多少?

swift - 展开和折叠表格 View 单元格时出现问题

ios - 以日期和时间两种不同的字符串格式转换格式为 "19-07-2018 08:10:24"的字符串

iphone - 我们如何打开一个已经存在的数据库 fmdb 以及在哪里包含它?

swift - 逗号自动添加到 Swift 中的 TextField

ios - 使用 Swift 最佳实践解析 PFUser 子类注册

ios - 我们能得到 UILabel 的名字吗?

ios - 如何将自定义 UIButton 添加到 Interface Builder 对象库?