Так что настройка была определенно актуальной.Очевидно, IB зависал, пытаясь загрузить вашу ячейку для вашего UICollectionView.Не удалось загрузить файл Nib.Это не имело никакого отношения к добавлению, которое он только что потерпел в то же время.Я повторил вашу проблему, затем создал ячейку с кодом, и все работало нормально.Дайте мне знать, если это поможет и ответит на ваш вопрос.Там есть весь необходимый код.
import UIKit
struct HashTag {
var word:String?
}
class HashCollectionViewCell: UICollectionViewCell {
lazy var wordLabel : UILabel = {
let lbl = UILabel(frame: self.bounds)
lbl.font = UIFont.systemFont(ofSize: 17)
lbl.textColor = .black
return lbl
}()
override init(frame: CGRect) {
super.init(frame: frame)
self.addSubview(wordLabel)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.addSubview(wordLabel)
}
func configureWithTag(tag:HashTag) {
wordLabel.text = tag.word
}
}
@IBDesignable
class HashTagView: UIView {
private var sizingLabel = UILabel(frame: .zero)
lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let view = UICollectionView(frame: self.bounds, collectionViewLayout: layout)
view.autoresizingMask = [.flexibleWidth,.flexibleHeight]
return view
}()
var hashtags: [HashTag] = [HashTag(word: "this works")]
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup(){
sizingLabel.font = UIFont.systemFont(ofSize: 17)
self.addSubview(collectionView)
collectionView.frame = self.bounds
collectionView.backgroundColor = self.backgroundColor
collectionView.register(HashCollectionViewCell.self, forCellWithReuseIdentifier: "hashCell")
self.addSubview(collectionView)
for x in 0..<10{
addHashTag(tag: "This is more \(x)")
}
collectionView.delegate = self
collectionView.dataSource = self
}
func addHashTag(tag:String){
let newHash = HashTag(word: tag)
self.hashtags.append(newHash)
}
override func layoutSubviews() {
super.layoutSubviews()
collectionView.frame = self.bounds
}
}
extension HashTagView: UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return hashtags.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "hashCell", for: indexPath) as? HashCollectionViewCell{
let tag = self.hashtags[indexPath.item]
cell.configureWithTag(tag: tag)
return cell
}
return UICollectionViewCell()
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let tag = self.hashtags[indexPath.item]
sizingLabel.text = tag.word
sizingLabel.sizeToFit()
return sizingLabel.frame.size
}
}
Результат:
2) Вы можете загрузить перо всозданная программным способом ячейка, и она будет работать. Пример будет выглядеть следующим образом для части, которая является программной ячейкой.
Код ячейки с расширением View с использованием кончика внутри ячейки:
extension UIView {
func loadNib() -> UIView {
let bundle = Bundle(for: type(of: self))
let nibName = type(of: self).description().components(separatedBy: ".").last!
let nib = UINib(nibName: nibName, bundle: bundle)
return nib.instantiate(withOwner: self, options: nil).first as! UIView
}
}
class HashCollectionViewCell: UICollectionViewCell {
var hashTagNib : HashTagNibView?
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup(){
if let htn = HashTagNibView().loadNib() as? HashTagNibView{
hashTagNib = htn
hashTagNib?.frame = self.bounds
hashTagNib?.autoresizingMask = [.flexibleWidth,.flexibleHeight]
self.addSubview(htn)
}
}
func configureWithTag(tag:HashTag) {
if let htn = hashTagNib{
htn.hashTagButtonLabel.setTitle(tag.word, for: .normal)
}
}
Настройка пера будет выглядеть следующим образом:
Это может дать вам больше гибкости в зависимости от того, что вы делаете ирезультат аналогичен, за исключением того, что в примере с пером я использовал UIButton.