iOS 在scrollView中滑动屏幕时无法禁用水平滚动?

标签 ios swift

在我的应用程序中,我必须实现 ScrollView 和页面控制,我使用 ScrollView 进行垂直滚动和水平滚动。当我使用水平滚动拖动屏幕时意味着它工作正常,但是当我使用垂直滚动拖动屏幕时意味着它有一些故障,例如(垂直和水平滚动)无法停止或无法找到问题。

所以我决定在页面控件中放置两个名为下一个和上一个的按钮,用于水平滚动下一页和上一页,所以我想在拖动屏幕时停止水平滚动,但我不知道如何停止水平滚动(不是垂直滚动)。

这里我发布了页面控制中的滚动以及下一个和上一个按钮操作的代码。

我已经声明并调用了 ScrollView 委托(delegate)。

UIScrollViewDelegate

override func viewDidLoad() {
    super.viewDidLoad()

    configurePageControl()

    scrollMainHolderView.delegate = self
    scrollMainHolderView.isPagingEnabled = true

}

ScrollView方法是:

//MARK:- Scrollview delegate -
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
    pageControlNew.currentPage = Int(pageNumber)
    self.scrollMainHolderView.contentSize=CGSize(width: self.view.frame.size.width * CGFloat(templateMutArray.count), height: CGFloat((globalYarr[Int(pageNumber)] as? CGFloat)!))
}

设置页面控件的代码,

func configurePageControl() {
    self.pageControlNew.numberOfPages = templateMutArray.count
    self.pageControlNew.currentPage = 0
    self.pageControlNew.tintColor = UIColor.red
    self.pageControlNew.pageIndicatorTintColor = UIColor.black
    self.pageControlNew.currentPageIndicatorTintColor = UIColor.green
}

下一个和上一个按钮操作的代码是,

@IBAction func pagePreviousBtnTapped(_ sender: Any) {
    isHorizontalSCrolling = true
    scrollMainHolderView.delegate = self
    let scrollBounds = self.scrollMainHolderView.bounds
    let contentOffset = CGFloat(floor(self.scrollMainHolderView.contentOffset.x - scrollBounds.size.width))
    self.movScrollToFrame(contentOffset: contentOffset)

}
@IBAction func pageNextBtnTapped(_ sender: Any) {
    isHorizontalSCrolling = true
    scrollMainHolderView.delegate = self
    let scrollBounds = self.scrollMainHolderView.bounds
    let contentOffset = CGFloat(floor(self.scrollMainHolderView.contentOffset.x + scrollBounds.size.width))
    self.movScrollToFrame(contentOffset: contentOffset)

}

最佳答案

据我从评论中了解到,您想停止水平滚动。这实际上非常简单。

您可以在 ScrollViewDelegate 方法中停止水平滚动或垂直滚动​​。方法如下,

contentOffset.x值设置为将阻止scrollview在水平方向滚动。

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    sender.contentOffset.x = 0.0
}

关于iOS 在scrollView中滑动屏幕时无法禁用水平滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49322864/

相关文章:

ios - Swift 中的 PureLayout 与 Cocoapods

swift - 自定义 UITableViewCell 只有两个创建的类之一没有初始化错误。 swift

ios - 无法让 MapView 放大当前位置 - SWIFT

ios - 在attributeText中添加链接修饰符后,范围内的文本变得不可见

ios - 如何在 SwiftUI 中设置 NavigationView 背景颜色

ios - 如何在 iOS 8 swift 中更改按钮文本大小

ios - 如何从 UITabBarViewController 调用 sub-tableVIew 方法

iOS UIButton - UIButton setUserInteractionEnabled 和 setEnabled 之间的区别

iOS7 和 iOS8 : how to detect when user said No to a request for push notifications

ios - 在 Swift 中向我的 NSURLSession 添加完成处理程序