iOS UIscrollView上添加View,设置约束不显示解决办法

不论是OC还是Swift都会遇到这样的问题,在scrollorView上添加view,给view设置约束后,run一下发现。view并没有显示,尤其是代码看起来好像没问题,举个例子如下:

//这是用Swift举的例子。跟OC是一样的。
private func creatUI() {
        contentView.addSubview(scrollView)
        scrollView.snp.makeConstraints { (make) in
            make.top.leading.trailing.equalTo(0)
            make.bottom.equalTo(-(isIphoneX ? 94 : 60))
        }
        let view = UIView()
        view.backgroundColor = .green
        scrollView.addSubview(view)
        view.snp.makeConstraints { (make) in
            make.top.leading.trailing.equalTo(0)
            make.height.equalTo(1000)
        }
    }

原因:
因为UIscrollview的top、leading、trailing、bottom是根据自己的contentSize来确定的,而不是bounds。

但是contentSize又是根据子视图决定的。因此,上面的代码就会导致添加上去的view宽高都是0。

view的四边都是依据contentSize确定,但是contentSize又不确定。这就导致scrollorView上面的子视图不显示,子视图上面的点击事件不响应等问题。


解决办法:
先在scrollorView上添加一个view。设置edges。并且,如果要垂直滚动的话,设置宽度约束,要横向滚动设置高度约束。
然后所有子控件都添加到这个view上去就好了。

let contentview = UIView()
let dataView = UIView()
private func creatUI() {
        scrollView.addSubview(contentview)
        contentview.addSubview(dataView)
    }
    private func addLayout() {
        //这里的目标是能垂直滚动
        contentview.snp.makeConstraints { (make) in
            make.edges.equalTo(scrollView)
            make.width.equalTo(scrollView)
        }
        dataView.snp.makeConstraints { (make) in
            make.top.leading.trailing.equalToSuperview()
            make.height.equalTo(270.scale)
            make.bottom.equalTo(0)
        }
    }

你可能感兴趣的:(Objective-C,Swift,自我小结)