swift scrollView subview width always 0?

问题描述 投票:0回答:0

我遇到了一个奇怪的问题,当我将它添加为 scrollView 的子视图时,子视图的宽度始终为 0,但是当我给子视图指定一个特定的数字时它会起作用,例如

make.width.equalTo(200)
.

我想知道是不是因为scrollView无法获得正确的宽度,但我检查了它显示宽度的屏幕层次结构是393。为什么子视图突然无法获得正确的宽度。

这是我的演示:

class ViewController: UIViewController {
    private lazy var scrollView: UIScrollView = {
        let scrollView = UIScrollView()
        scrollView.delegate = self
        scrollView.alwaysBounceVertical = true
        scrollView.contentInsetAdjustmentBehavior = .always
        scrollView.backgroundColor = .white
        return scrollView
    }()
    
    private lazy var viewOne: UIView = {
        let view = UIView()
        view.backgroundColor = .blue
        return view
    }()
    
    private lazy var viewTwo: UIView = {
        let view = UIView()
        view.backgroundColor = .yellow
        view.alpha = 0.5
        return view
    }()
    
    private lazy var viewThree: UIView = {
        let view = UIView()
        view.backgroundColor = .red
        view.alpha = 0.5
        return view
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        setupUI()
    }
    

    private func setupUI() {
        view.backgroundColor = .white
        
        view.addSubview(scrollView)
        scrollView.addSubview(viewOne)
        viewOne.backgroundColor = .blue
        scrollView.addSubview(viewTwo)
        scrollView.addSubview(viewThree)
        
        scrollView.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
        
        viewOne.snp.makeConstraints { make in
            make.top.equalToSuperview()
            make.left.right.equalToSuperview()
            make.height.equalTo(200)
        }
        
        viewTwo.snp.makeConstraints { make in
            make.top.equalTo(viewOne.snp.bottom).offset(12)
            make.left.right.equalToSuperview()
            make.height.equalTo(200)
        }
        
        viewThree.snp.makeConstraints { make in
            make.top.equalTo(viewTwo.snp.bottom).offset(12)
            make.left.right.equalToSuperview()
            make.height.equalTo(200)
            make.bottom.equalToSuperview()
        }
    }
}

extension ViewController: UIScrollViewDelegate {
    
}

swift autolayout scrollview
© www.soinside.com 2019 - 2024. All rights reserved.