在无限循环中添加放置在 uiscrollview 上的图像视图

add image view placed on uiscrollview in a infinite loop

我的 swift 下面的代码目标是向 uiscrollview 添加无穷无尽的图像视图。每次调用 func add 时,图像视图应在 y 轴上分开 200 像素。我在下面添加了一个 gif,展示了我希望通过循环完成的工作。我想我必须为此把 [] 放在栏中。

gif

   import UIKit

class ViewController: UIViewController {

var addBtn = UIButton()
var scrollView = UIScrollView()
var imageVV = UIImageView()



override func viewDidLoad() {
    super.viewDidLoad()

    [addBtn,scrollView,imageVV].forEach({

        view.addSubview([=10=])
        [=10=].translatesAutoresizingMaskIntoConstraints = false
    })
    addBtn.setTitle("add", for: .normal)



    addBtn.backgroundColor = .green
    imageVV.backgroundColor = .red
    scrollView.contentSize.height = 1000

    scrollView.isUserInteractionEnabled = true

    scrollView.backgroundColor = .blue
    scrollView.addSubview(imageVV)

    NSLayoutConstraint.activate([


        imageVV.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0),

        imageVV.topAnchor.constraint(equalTo: scrollView.topAnchor, constant : 0),
        imageVV.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.5, constant: 0),
        imageVV.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.10, constant: 0),








        scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0),
        scrollView.topAnchor.constraint(equalTo: view.topAnchor, constant : 0),
        scrollView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1, constant: 0),
        scrollView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.90, constant: 0),









        addBtn.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0),
        addBtn.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant : 0),
        addBtn.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1.0, constant: 0),
        addBtn.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.10, constant: 0),




    ] )


    addBtn.addTarget(self, action: #selector(add), for: .touchDown)


}

@objc func add(){
    NSLayoutConstraint.activate([



    ])


}


}

您应该考虑为此使用 CollectionView。 通过这种方式,您可以添加无数个单元格 - 可以是您的图像或任何您想要的。 您可以将单元格之间的距离设置为 200 像素或其他任何值。

每次点击添加时,您只需向用于 CollectionViewcollectionView.reloadData() 的数组添加一个新条目即可更新 UI。

希望对你有所帮助,祝你好运!

class ViewController: UIViewController{

    fileprivate var  lastImage:UIImageView?
    fileprivate var mainViewBootom:NSLayoutConstraint?


    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        setupVIew()
    }

    override func viewDidAppear(_ animated: Bool) {
        scrollView.contentSize = CGSize(width: view.frame.width, height: mainView.frame.height)
        view.layoutIfNeeded()
    }

    //MARK: Components
    let scrollView:UIScrollView = {
        let sv = UIScrollView(frame: .zero)
        return sv
    }()

    let mainView:UIView = {
        let uv = UIView()
        uv.backgroundColor = .white
        return uv
    }()

    let btnAdd:UIButton = {
        let btn = UIButton(type: .system)
        btn.setTitle("Add", for: .normal)
        return btn
    }()

    //MARK: Setup UI
    func setupVIew() {
        view.addSubview(scrollView)
        view.addSubview(btnAdd)

        scrollView.translatesAutoresizingMaskIntoConstraints = false
        btnAdd.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            btnAdd.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            btnAdd.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -12),
            btnAdd.widthAnchor.constraint(equalToConstant: 100),
            btnAdd.heightAnchor.constraint(equalToConstant: 45),

            scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            scrollView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
            scrollView.bottomAnchor.constraint(equalTo: btnAdd.topAnchor , constant: -12),
        ])
        btnAdd.addTarget(self, action: #selector(didClickedAdd), for: .touchUpInside)

        scrollView.addSubview(mainView)
        mainView.translatesAutoresizingMaskIntoConstraints = false

        NSLayoutConstraint.activate([
            mainView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            mainView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            mainView.topAnchor.constraint(equalTo: scrollView.topAnchor),
        ])

        let imgView = UIImageView(frame: CGRect(x: 0, y: 0, width: 150, height: 100))
        imgView.backgroundColor  = .red
        mainView.addSubview(imgView)
        imgView.translatesAutoresizingMaskIntoConstraints = false
        imgView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        imgView.widthAnchor.constraint(equalToConstant: 150).isActive = true
        imgView.heightAnchor.constraint(equalToConstant: 100).isActive = true

        if lastImage != nil {
            imgView.topAnchor.constraint(equalTo: lastImage!.bottomAnchor , constant: 20).isActive = true
        }else{
            imgView.topAnchor.constraint(equalTo: mainView.topAnchor , constant: 12).isActive = true
        }
        lastImage = imgView
        mainViewBootom = mainView.bottomAnchor.constraint(equalTo: lastImage!.bottomAnchor , constant: 12)
        mainViewBootom!.isActive = true
    }

    @objc func didClickedAdd(){
        let imgView = UIImageView(frame: CGRect(x: 0, y: 0, width: 150, height: 100))
        imgView.backgroundColor  = .red
        mainView.addSubview(imgView)
        imgView.translatesAutoresizingMaskIntoConstraints = false
        imgView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        imgView.widthAnchor.constraint(equalToConstant: 150).isActive = true
        imgView.heightAnchor.constraint(equalToConstant: 100).isActive = true

        if lastImage != nil {
            imgView.topAnchor.constraint(equalTo: lastImage!.bottomAnchor , constant: 20).isActive = true
        }else{
            imgView.topAnchor.constraint(equalTo: mainView.topAnchor , constant: 12).isActive = true
        }
        lastImage = imgView
        mainView.removeConstraint(mainViewBootom!)
        mainViewBootom = mainView.bottomAnchor.constraint(equalTo: lastImage!.bottomAnchor , constant: 12)
        mainViewBootom!.isActive = true
        view.layoutIfNeeded()
        scrollView.contentSize = CGSize(width: view.frame.width, height: mainView.frame.height)
        view.layoutIfNeeded()

    }


}

`