2015-10-15 92 views
2

UICollectionView的标题显示不正确。我在头文件中添加了一个UILabel,它应该显示节号。当我调试viewForSupplementaryElementOfKind时,一切看起来都不错。我查看了关于collectionView标题的不同教程,并且在代码中找不到该错误。 enter image description hereSwift UICollectionView标题显示不正确

这里是整个代码:

import UIKit 

class ViewController: UIViewController { 

    var collectionView:UICollectionView!; 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let layout:UICollectionViewFlowLayout = UICollectionViewFlowLayout(); 
     layout.sectionInset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20); 
     layout.itemSize = CGSize(width: 60, height: 60); 
     layout.headerReferenceSize = CGSize(width: CGRectGetWidth(self.view.bounds), height: 50); 

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


     collectionView.dataSource = self; 
     collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "cell"); 
     collectionView.registerClass(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "header"); 
     collectionView.delegate = self; 
     self.view.addSubview(collectionView); 

    } 

} 

extension ViewController:UICollectionViewDataSource{ 
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return 5; 
    } 

    func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
     return 10 
    } 

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath); 

     cell.backgroundColor = UIColor.whiteColor(); 

     return cell; 
    } 




    func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { 

     let view = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "header", forIndexPath: indexPath) 

     view.backgroundColor = UIColor.blueColor(); 


     let label = UILabel(frame: view.frame); 
     label.text = String(indexPath.section); 
     label.font = UIFont(name: "helvetica", size: 40); 
     label.textAlignment = .Center; 
     view.addSubview(label); 



     return view; 

    } 


} 
+1

这不是你的问题的根源,但它很重要:你并没有意识到'collectionView.dequeueReusableSupplementaryViewOfKind'返回一个_reusable_视图。这个词很重要。该视图可能与已用于其他标题的视图相同。如果是这样,你不想再次添加标签。 – matt

回答

6

替换行

let label = UILabel(frame: view.frame); 

let label = UILabel(frame: view.bounds); 

虽然你要注意,你需要修复与您的代码的其他问题关于重用补充观点。我建议创建一个带有标签的UICollectionReusableView的子类,而不是从数据源手动添加新标签。