gpt4 book ai didi

ios - 如何修复 UICollectionView 单元格中的 fatal error ?

转载 作者:行者123 更新时间:2023-11-29 05:38:09 25 4
gpt4 key购买 nike

我在storyboard中有MasterViewControllerUICollectionView。我将此代码用于我的 UICollectionView:

MasterViewController:

class MasterViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, URLSessionDownloadDelegate, SKProductsRequestDelegate, SKStoreProductViewControllerDelegate {

@IBOutlet weak var collectionView: UICollectionView?

fileprivate var currentPage: Int = 0
fileprivate var pageSize: CGSize {
let layout = UPCarouselFlowLayout()
var pageSize = layout.itemSize
pageSize.width += layout.minimumLineSpacing
return pageSize
}

override func viewDidLoad() {
super.viewDidLoad()

self.addCollectionView()
self.setupLayout()
}

func setupLayout(){

let pointEstimator = RelativeLayoutUtilityClass(referenceFrameSize: self.view.frame.size)

self.collectionView?.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
self.collectionView?.topAnchor.constraint(equalTo: self.view.topAnchor, constant: pointEstimator.relativeHeight(multiplier: 0.1754)).isActive = true
self.collectionView?.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true
self.collectionView?.heightAnchor.constraint(equalToConstant: pointEstimator.relativeHeight(multiplier: 0.6887)).isActive = true

self.currentPage = 0
}

func addCollectionView(){

let pointEstimator = RelativeLayoutUtilityClass(referenceFrameSize: self.view.frame.size)

let layout = UPCarouselFlowLayout()

layout.itemSize = CGSize(width: pointEstimator.relativeWidth(multiplier: 0.73333), height: 400)

layout.scrollDirection = .horizontal

self.collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)

self.collectionView?.translatesAutoresizingMaskIntoConstraints = false

self.collectionView?.delegate = self
self.collectionView?.dataSource = self

self.collectionView?.register(MasterViewCell.self, forCellWithReuseIdentifier: "Cell")


let spacingLayout = UPCarouselFlowLayout()
spacingLayout.spacingMode = UPCarouselFlowLayoutSpacingMode.overlap(visibleOffset: 20)
}

MasterViewCell:

class MasterViewCell: UICollectionViewCell {
let customView: UIView = {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
view.layer.cornerRadius = 12
return view
}()
var cellImageView: UIImageView!


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

self.addSubview(self.customView)

self.customView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
self.customView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
self.customView.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 1).isActive = true
self.customView.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 1).isActive = true


}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

RelativeLayoutUtilityClass:

class RelativeLayoutUtilityClass {

var heightFrame: CGFloat?
var widthFrame: CGFloat?

init(referenceFrameSize: CGSize){
heightFrame = referenceFrameSize.height
widthFrame = referenceFrameSize.width
}

func relativeHeight(multiplier: CGFloat) -> CGFloat{

return multiplier * self.heightFrame!
}

func relativeWidth(multiplier: CGFloat) -> CGFloat{
return multiplier * self.widthFrame!

}

但我在 MasterViewCell 中遇到此错误:*线程 1: fatal error :init(coder:) 尚未实现*

如何解决?

最佳答案

您尚未实现 init(coder:) 初始化程序,如您在此处看到的:

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

您似乎正在从 Storyboard加载一些单元格,因此您不能仅在此处使用 fatalError

实现应该非常简单。您可以执行与 init(frame:) 初始化程序中相同的操作:

class MasterViewCell: UICollectionViewCell {
let customView: UIView = {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
view.layer.cornerRadius = 12
return view
}()
var cellImageView: UIImageView!


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

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

private func commonInit() {
self.addSubview(self.customView)

self.customView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
self.customView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
self.customView.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 1).isActive = true
self.customView.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 1).isActive = true
}
}

关于ios - 如何修复 UICollectionView 单元格中的 fatal error ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56826356/

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