我在MyView文件中以编程方式创建了scrollView。
let myScrollView: UIScrollView = {
let scrollView = UIScrollView()
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.isUserInteractionEnabled = true
return scrollView
}()
使用视觉格式语言,我将所有约束设置为等于superView。
func setupViews() {
self.frame = UIScreen.main.bounds
addSubview(myScrollView)
addConstraintsWithFormat(format: "H:|[v0]|", views: myScrollView)
addConstraintsWithFormat(format: "V:|[v0]|", views: myScrollView)
}
我的scrollView有一个按钮和一个标签。
在viewController的viewDidLayoutSubviews中,我设置contentSize:
myView.myScrollView.contentSize = CGSize(width: self.view.frame.size.width, height: self.view.frame.size.height + 200)
一切正常:我可以滚动,myScrollView的高度是完美的,但宽度仅适用于iPhoneX。
这是iPhone SE的示例:
ScrollView比屏幕宽。在iPhone Plus中,它比屏幕小。
我在做什么错,如何解决?
先感谢您!
最佳答案
首先,切勿在addSubview
中执行layoutSubviews()
。这意味着您可以在每个布局中添加视图。您可能最终在层次结构中有几个scrollViews。
其次,您可以做一个scrollView.frame = bounds
并据此计算您的实际contentSize
。内容大小与scrollView的frame
无关。您需要获得最底层的视图并获得他的maxY。 X轴也一样。如果您希望内容仅垂直滚动,则可以使用contentSize = CGSize(width: width, height: lastViewInScrollView.frame.maxY)
之类的方法。
如果您绝对需要VFL,请至少正确计算contentSize
(即使用scrollView
中包含的视图的实际框架)
至于在scrollView之外布局的视图,可能是您为这些视图设置了错误的大小。