代码之家  ›  专栏  ›  技术社区  ›  Chris

在ScrollView中启用水平滚动

  •  0
  • Chris  · 技术社区  · 6 年前

    我有一个简单的问题 ScrollView 和4 buttons 在里面,我想做一个 horizontal ScrollView .

    我是这样设置的:

    let itemScrollView: UIScrollView = {
        let v = UIScrollView()
        v.translatesAutoresizingMaskIntoConstraints = false
        v.backgroundColor = .red
        return v
    }()
    

    我这样约束它和它的内容:

    itemView.addSubview(itemScrollView)
    itemScrollView.addSubview(imageButton)
    itemScrollView.addSubview(priceButton)
    itemScrollView.addSubview(linkButton)
    itemScrollView.addSubview(noteButton)
    self.addSubview(dropDownButton)
    
    itemView.heightAnchor.constraint(equalToConstant: 60).isActive = true
    
    dropDownButton.heightAnchor.constraint(equalToConstant: 35).isActive = true
    dropDownButton.widthAnchor.constraint(equalToConstant: 150).isActive = true
    dropDownButton.trailingAnchor.constraint(equalTo: itemView.trailingAnchor, constant: -20).isActive = true
    dropDownButton.centerYAnchor.constraint(equalTo: itemView.centerYAnchor).isActive = true
    
    itemScrollView.topAnchor.constraint(equalTo: itemView.topAnchor).isActive = true
    itemScrollView.leadingAnchor.constraint(equalTo: itemView.leadingAnchor).isActive = true
    itemScrollView.trailingAnchor.constraint(equalTo: dropDownButton.leadingAnchor).isActive = true
    itemScrollView.bottomAnchor.constraint(equalTo: itemView.bottomAnchor).isActive = true
    
    imageButton.heightAnchor.constraint(equalToConstant: 25).isActive = true
    imageButton.widthAnchor.constraint(equalToConstant: 25).isActive = true
    imageButton.centerYAnchor.constraint(equalTo: itemScrollView.centerYAnchor).isActive = true
    imageButton.leadingAnchor.constraint(equalTo: itemScrollView.leadingAnchor, constant: 20).isActive = true
    
    priceButton.heightAnchor.constraint(equalToConstant: 25).isActive = true
    priceButton.widthAnchor.constraint(equalToConstant: 25).isActive = true
    priceButton.centerYAnchor.constraint(equalTo: itemScrollView.centerYAnchor).isActive = true
    priceButton.leadingAnchor.constraint(equalTo: imageButton.leadingAnchor, constant: 45).isActive = true
    
    linkButton.heightAnchor.constraint(equalToConstant: 25).isActive = true
    linkButton.widthAnchor.constraint(equalToConstant: 25).isActive = true
    linkButton.centerYAnchor.constraint(equalTo: itemScrollView.centerYAnchor).isActive = true
    linkButton.leadingAnchor.constraint(equalTo: priceButton.leadingAnchor, constant: 45).isActive = true
    
    noteButton.heightAnchor.constraint(equalToConstant: 25).isActive = true
    noteButton.widthAnchor.constraint(equalToConstant: 25).isActive = true
    noteButton.centerYAnchor.constraint(equalTo: itemScrollView.centerYAnchor).isActive = true
    noteButton.leadingAnchor.constraint(equalTo: linkButton.leadingAnchor, constant: 45).isActive = true
    

    最后它看起来像这样,正是我想要的(第四个按钮隐藏在 dropDownButton ),但只能滚动 竖的 .

    enter image description here

    更新:

    通过添加这行代码,我可以水平滚动:

    v.alwaysBounceHorizontal = true
    

    然而,现在的问题是,它总是在滚动后“反弹”到左侧。我如何解决这个问题?

    0 回复  |  直到 6 年前
        1
  •  0
  •   Vyacheslav Pukhanov    6 年前

    您想使视图控制器符合 UIScrollViewDelegate 设置 scrollView.delegate = self 并实施 scrollViewDidScroll 方法如下:

    func scrollViewDidScroll(scrollView: UIScrollView) {
        if scrollView.contentOffset.y != 0 {
            scrollView.contentOffset.y = 0
        }
    }