我有一个包含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)
}
}
答案 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)
}
}