尽管设置了委托

时间:2019-02-27 22:51:03

标签: ios swift

我有2个视图控制器。第一个是主要的,只有一个在屏幕上的按钮。单击该按钮时,我的第二个视图控制器显示在屏幕底部。

我的第二个视图控制器将scrollview作为子视图。尽管我设置了scrollview的委托,但它不响应滚动。

与我类似的问题通常在代表添加后解决,但不归我所有。知道我在这里错过了什么吗?

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = UIColor.white

        let button = UIButton(frame: CGRect(x: 100, y: 100, width: 60, height: 30))
        button.backgroundColor = .black
        button.setTitle("Button", for: .normal)

        button.addTarget(self, action: #selector(self.touchUpInside), for: .touchUpInside)

        self.view.addSubview(button)
    }

    @objc func touchUpInside() {
        print("Button Clicked")
        let vc = SecondViewController()
        present(vc, animated: true, completion: nil)
    }

}

SecondViewController和scrollView

class SecondViewController: UIViewController, UIScrollViewDelegate {

var scrollView: UIScrollView!

init() {
    super.init(nibName: nil, bundle: nil)
    modalPresentationStyle = .custom
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

override func viewDidLoad() {
    super.viewDidLoad()

    self.view.backgroundColor = .clear
    let displayWidth: CGFloat = self.view.frame.width
    let displayHeight: CGFloat = self.view.frame.height

    self.scrollView = UIScrollView(frame: CGRect(x: 0, y: displayHeight - displayHeight / 3, width: displayWidth, height: displayHeight))
    self.scrollView.contentSize = CGSize(width: displayWidth, height: displayHeight)
    self.scrollView.backgroundColor = UIColor.blue
    self.scrollView.isPagingEnabled = false
    self.scrollView.isScrollEnabled = true
    self.scrollView.showsHorizontalScrollIndicator = false
    self.scrollView.showsVerticalScrollIndicator = false
    self.scrollView.isUserInteractionEnabled = true
    self.scrollView.delegate = self

    self.view.addSubview(self.scrollView)
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    print("scrollViewDidScroll()")

}

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    print("scrollViewWillBeginDragging()")
}

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView){
    print("scrollViewDidEndDecelerating() ")
}

}

scrollView方法永远不会被调用。

2 个答案:

答案 0 :(得分:0)

这可能是因为您的内容大小与滚动视图框架相同-由于内容大小与框架相同,因此没有理由滚动它。尝试增加高度(用于垂直滚动)或宽度(用于水平滚动),然后看是否有效

答案 1 :(得分:0)

问题在于这两行代码

self.scrollView = UIScrollView(frame: CGRect(x: 0, y: displayHeight - displayHeight / 3, width: displayWidth, height: displayHeight))
self.scrollView.contentSize = CGSize(width: displayWidth, height: displayHeight)

scrollView.frame.size应该较小,或者contentSize应该较大。如果两者相同,则scrollView无需滚动。

如果仅框架的高度和内容的大小不同,您将获得垂直滚动。如果是宽度,您将获得水平滚动。