gpt4 book ai didi

ios - 以编程方式将 UICollectionView 嵌套在 UIVIew 中

转载 作者:搜寻专家 更新时间:2023-10-31 08:19:34 27 4
gpt4 key购买 nike

我试图让 UICollectionView 位于 UIView 内部,因为我使用的框架需要返回 UIView。我看过这个问题:How do I add a UICollectionView to a UIView as a subview?Adding UICollectionView inside UIView without Storyboards但不确定如何让它工作。

我试过这样的:

class TopView : UIView, UICollectionViewDataSource, UICollectionViewDelegate {

override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .red

addSubview(collectionView)
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}

lazy var collectionView : UICollectionView = {
let layout = UICollectionViewFlowLayout()
let cv = UICollectionView(frame: CGRect.zero, collectionViewLayout: layout)
cv.translatesAutoresizingMaskIntoConstraints = false
cv.delegate = self
cv.dataSource = self
cv.register(HeaderCell.self, forCellWithReuseIdentifier: "HeaderCell")
cv.backgroundColor = .yellow

return cv
}()

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 1
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "HeaderCell", for: indexPath) as! HeaderCell

return cell

}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: self.collectionView.frame.width, height: 200)
}

func collectionView(_ collectionView: UICollectionView, numberOfSections section: Int) -> Int {
return 1
}

}

但是我得到一个空白屏幕。

更新:

这就是我将 TopView 添加到 UIViewController 的方式:

class MainViewController: UIViewController {

var mainView = TopView()

override func viewDidLoad() {
super.viewDidLoad()

view.addSubview(mainView)
}
}

我只是黑屏。

最佳答案

顶 View .swift

class TopView : UIView, UICollectionViewDataSource, UICollectionViewDelegate {

lazy var collectionView : UICollectionView = {
let layout = UICollectionViewFlowLayout()
let cv = UICollectionView(frame: CGRect.zero, collectionViewLayout: layout)
//If you set it false, you have to add constraints.
cv.translatesAutoresizingMaskIntoConstraints = false
cv.delegate = self
cv.dataSource = self
cv.register(HeaderCell.self, forCellWithReuseIdentifier: "HeaderCell")
cv.backgroundColor = .yellow
return cv
}()

override init(frame: CGRect) {
super.init(frame: frame)

self.backgroundColor = .red

addSubview(collectionView)

//Add constraint
collectionView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
collectionView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
collectionView.topAnchor.constraint(equalTo: topAnchor).isActive = true
collectionView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}

func collectionView(_ collectionView: UICollectionView, numberOfSections section: Int) -> Int {
return 1
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 30
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "HeaderCell", for: indexPath) as! HeaderCell
cell.backgroundColor = .cyan
return cell
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: self.collectionView.frame.size.width, height: 200)
}
}

ViewController.swift

lazy var topView: TopView = {
let tv = TopView()
tv.translatesAutoresizingMaskIntoConstraints = false
return tv
}()

func addTopView() {
view.addSubview(topView)

topView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
topView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
topView.topAnchor.constraint(equalTo: view.topAnchor, constant: 300).isActive = true
topView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
topView.heightAnchor.constraint(equalToConstant: 200).isActive = true
}

Call addTopView() from viewDidLoad()

关于ios - 以编程方式将 UICollectionView 嵌套在 UIVIew 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47261152/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com