使用 setContentOffSet 按钮滚动

Posted

技术标签:

【中文标题】使用 setContentOffSet 按钮滚动【英文标题】:Scroll using setContentOffSet button 【发布时间】:2017-03-30 07:29:24 【问题描述】:

我试图弄清楚滚动视图以及如何使它们以编程方式滚动。

我在一个视图控制器中设置了 2 个屏幕(图像视图)。

我通过选择左上角和右下角以及高度和宽度来为图像视图和滚动视图添加约束。

我的视图控制器有这个

import UIKit

class ViewController: UIViewController 
var scrollView: UIScrollView!

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.


override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.

override var prefersStatusBarHidden: Bool 
    return true


@IBAction func toFloorplan(_ sender: Any) 
    scrollView.setContentOffset(CGPoint(x:1366, y:0), animated: false)

还有一个调用 toFloorPlan 的简单按钮。

我可以使用分页向左和向右滚动,但是当我单击按钮时,我的应用程序退出并且我得到以下打印输出。谢谢你的帮助!!

2017-03-30 18:20:13.423801 VHTenNow[78847:14546188] [LayoutConstraints] 无法同时满足约束。 以下列表中的至少一个约束可能是您不想要的。 试试这个: (1)查看每个约束并尝试找出您不期望的; (2) 找到添加了一个或多个不需要的约束的代码并修复它。 ( "", "", "", “” )

将尝试通过打破约束来恢复

在 UIViewAlertForUnsatisfiableConstraints 创建一个符号断点,以便在调试器中捕获它。 中列出的 UIView 上的 UIConstraintBasedLayoutDebugging 类别中的方法也可能会有所帮助。 致命错误:在展开可选值时意外发现 nil (lldb)

【问题讨论】:

你有冲突的约束,这就是打印出来的意思。生成方法是滚动视图应该只有 1 个子视图。在该子视图中,您可以根据需要添加任意数量的子视图。对于您的情况,我建议使用左侧图像视图,将 top, left and bottom 固定到 contentView。对于正确的图像视图,将top, right, bottom 固定到 contentView。使右图像视图的前导匹配左图像视图的尾随。冲突的约束不会使应用程序崩溃。如果您的应用程序崩溃,听起来问题是另外一回事。如果您将toFloorPlan 内部语句注释掉会怎样? 【参考方案1】:
@IBOutlet weak var scrollView: UIScrollView!  

并创建插座 - 将情节提要中的滚动视图与滚动视图变量连接。 您的约束错误,但不会导致崩溃

【讨论】:

以上是关于使用 setContentOffSet 按钮滚动的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 无限滚动 setContentOffset

UIScrollView 没有使用 setContentOffset:animated 滚动到正确的位置:

使用 setContentOffset 将 UITableView 滚动到特定位置无法正常工作 - ObjC

setContentOffset 到滚动视图中的 UIImage 位置

UITableView, setContentOffset 动画:NO 不会在 iPad 上滚动

Swift UIScrollView 不滚动但响应 setContentOffset 和 Delegate 响应