1

プログラムでnibファイルをスクロールビューにロードする必要があり、スクロールビューに制約を固定する必要があります。私のビューは複雑なので、Nib を使用することにしましたが、プログラムでスクロール ビューに追加する必要があります。ほとんどすべての方法を試しましたが、制約が機能していないようです。以下の私のコードを見てください。

1) スクロール ビューを作成し、制約を追加します。

scrollView.snp.makeConstraints { (make) in
    make.edges.equalTo(view)
    make.centerY.equalToSuperview()
}

2) スクロール ビューにコンテンツ ビューを追加します。

contentView = UIView()
contentView.backgroundColor = .red
scrollView.addSubview(contentView)

contentView.snp.makeConstraints { (make) in
    make.edges.equalTo(scrollView)
    make.size.height.equalTo(scrollView)
    make.centerY.equalToSuperview()
}

3) Nib ビューをロードし、コンテンツ ビューに追加します。ここでのコツは、最初のビューの幅をスクロール ビューに設定して、各ビューのサイズに合わせて自動的にサイズ変更し、すべての子ビューの幅を同じにすることです。

var previous: customView =  customView()
// suppose we have three custom views need to loaded from Nib and add in scroll view 
for i in 0..<3 {
    let view = customView() // Tried giving frame as well but no success
    view.initWithTitle(tutorailArray![i].heading, title: tutorailArray![i].title, image: tutorailArray![i].imageName)
    self.contentView.addSubview(view)
    view.translatesAutoresizingMaskIntoConstraints = false

    view.snp.makeConstraints({ [weak contentView, previous, scrollView] (make) in

       make.top.bottom.equalTo(contentView!)

        if ( i == 0) {
            make.size.width.equalTo(scrollView)
            make.leading.equalTo(contentView!)
        }
        else {
            make.size.width.equalTo(previous)
            make.leading.equalTo(previous)
        }

        if i == 2 {
            make.size.width.equalTo(previous)
            make.trailing.equalTo(contentView!)
            make.leading.equalTo(previous)
        }
    })

    previous = view
}
4

0 に答える 0