2017-10-20 23 views
0

J'ai un inputView où un collectionView sera affiché. J'ai utilisé la mise en page automatique pour cette entréeView. Lors de l'exécution de l'application numberOfItemsInSection est appelée, mais cellForItemAt n'est pas appelée. Donc, aucune cellule ne s'affiche. Ai-je fait quelque chose de mal en utilisant la contrainte? J'ai aussi créé projet https://drive.google.com/file/d/0B5UHWsK1E6dSRDA5bmtSY2ZZbGs/viewcellForItemAt n'appelle pas dans collectionView

ViewController.swift

override func viewDidLoad() { 
    super.viewDidLoad() 
    textField.inputView = InputPhotoView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 265)) 
    textField.becomeFirstResponder() 
} 

InputPhotoView.swift

class InputPhotoView: UIView { 
let CellIdentifier = "Cell" 
override init(frame: CGRect) { 
    super.init(frame: frame) 
    collectionView.dataSource = self 
    collectionView.register(CustomCell.self, forCellWithReuseIdentifier: CellIdentifier) 
    setupViews() 
} 
required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    fatalError("Not yet implented") 
} 
func setupViews() { 
    self.backgroundColor = UIColor.brown 
    self.addSubview(collectionView) 
    setupConstraints() 
} 
func setupConstraints() { 
    NSLayoutConstraint.activate([ 
     collectionView.leadingAnchor.constraint(equalTo: self.trailingAnchor, constant: 50), 
     collectionView.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: 0), 
     collectionView.topAnchor.constraint(equalTo: self.topAnchor, constant: 0), 
     collectionView.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0) 
     ]) 
} 
public lazy var collectionView: UICollectionView = { 
    let layout = UICollectionViewFlowLayout() 
    layout.scrollDirection = .horizontal 
    layout.itemSize = CGSize(width: 100, height: 100) 
    layout.minimumInteritemSpacing = 0 
    layout.sectionInset = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5) 
    let collectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: layout) 
    collectionView.translatesAutoresizingMaskIntoConstraints = false 
    collectionView.contentInset = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5) 
    return collectionView 
}() 

} DataSource

extension InputPhotoView : UICollectionViewDataSource { 
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    print("number of items") 
    return 10 
} 
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CellIdentifier, for: indexPath) as! CustomCell 
    return cell 
} 

}

Répondre

0

Votre code a des conflits de contraintes, de sorte que collectionView n'est pas visible. Essayez de changer cette ligne:

collectionView.leadingAnchor.constraint(equalTo: self.trailingAnchor, constant: 50) 

à quelque chose comme ceci:

collectionView.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 50)