滚动视图不水平滚动

Posted

技术标签:

【中文标题】滚动视图不水平滚动【英文标题】:Scroll view not scrolling horizontal 【发布时间】:2019-03-18 12:03:58 【问题描述】:

我有一个自定义视图,我在父级中设置它:

func setup()
    view.backgroundColor = .gray
    view.addSubview(chartView)
    chartView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
    chartView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
    chartView.topAnchor.constraint(equalTo: view.topAnchor, constant: statusAndNavigationBarHeight).isActive = true
    chartView.heightAnchor.constraint(equalToConstant: Dimensions.chartHeight.value).isActive = true

然后在那个视图中我尝试设置一个滚动:

scroll = UIScrollView.init(frame: CGRect(x: 0.0, y: 0.0, width: scrollWidth(), // print 728.0
                                                 height: Double(Dimensions.chartHeight.value))) // print 400.0
    scroll.isScrollEnabled = true
    scroll.showsHorizontalScrollIndicator = true
    addSubview(scroll)

仅此而已,当我启动应用程序时,我无法水平拖动和滚动,在调试编辑器中我看不到它是大宽度的滚动视图。

【问题讨论】:

【参考方案1】:

scrollView 不会以它的大小滚动,它需要一个定义它的内容大小的内容,例如

class ViewController: UIViewController 

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

        let chartView = UIView()
        chartView.translatesAutoresizingMaskIntoConstraints = false
        chartView.backgroundColor = .red
        view.backgroundColor = .gray
        view.addSubview(chartView)
        chartView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        chartView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        chartView.topAnchor.constraint(equalTo: view.topAnchor, constant: 100).isActive = true
        chartView.heightAnchor.constraint(equalToConstant:200).isActive = true
        let scroll = UIScrollView(frame: CGRect(x: 0.0,
            y: 0.0,
            width: UIScreen.main.bounds.size.width, // print 728.0
            height: 200.0))
        scroll.isScrollEnabled = true
        scroll.showsHorizontalScrollIndicator = true
        chartView.addSubview(scroll)
        let www = UIView()
        www.backgroundColor = .green
        www.translatesAutoresizingMaskIntoConstraints = false
         scroll.addSubview(www)
        www.leftAnchor.constraint(equalTo: scroll.leftAnchor).isActive = true
        www.rightAnchor.constraint(equalTo: scroll.rightAnchor).isActive = true
        www.topAnchor.constraint(equalTo: scroll.topAnchor).isActive = true
        www.bottomAnchor.constraint(equalTo: scroll.bottomAnchor).isActive = true
        www.heightAnchor.constraint(equalToConstant:200).isActive = true
        www.widthAnchor.constraint(equalTo: view.widthAnchor,multiplier:2.0).isActive = true
        scroll.addSubview(www)

    

【讨论】:

为什么要添加两次视图?

以上是关于滚动视图不水平滚动的主要内容,如果未能解决你的问题,请参考以下文章

滚动视图不水平滚动

水平滚动视图不滚动

(垂直)滚动视图包含另一个(水平)滚动视图 - Kivy

ios 8 - 水平滚动视图中的按钮拦截平移事件 - 滚动不起作用

我的水平滚动视图不起作用

如何与作为滚动视图子视图的水平滚动视图交互?