我有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方法永远不会被调用。
答案 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无需滚动。
如果仅框架的高度和内容的大小不同,您将获得垂直滚动。如果是宽度,您将获得水平滚动。