我在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的示例:

swift - UIScrollView宽度比屏幕宽-LMLPHP

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之外布局的视图,可能是您为这些视图设置了错误的大小。

07-28 01:49
查看更多