Заголовки и нижние колонтитулы раздела UICollectionView отображаются неправильно - iOS

Проблема в том, что SupplementaryView имеет textLabel, но текст отображается в неправильном месте, в то время как верхний и нижний колонтитулы и textLabel отображаются правильно.

Как вы можете видеть на картинке, только заголовок первого раздела имеет заголовок, остальной текст верхнего или нижнего колонтитула не виден (они есть на экране, но вам нужно прокрутить вниз, чтобы увидеть его).
Не знаю. не знаю как решить...

Я настраиваю представление коллекции следующим образом в функции viewDidLoad:

func setupCollectionsView(){
    let width:CGFloat = self.view.frame.size.width/4
    let flowLayout = UICollectionViewFlowLayout()
    flowLayout.minimumInteritemSpacing = 5
    flowLayout.minimumLineSpacing = 5
    flowLayout.estimatedItemSize = CGSizeMake(width, width)
    flowLayout.headerReferenceSize = CGSizeMake(self.view.frame.size.width, 30)
    flowLayout.footerReferenceSize = CGSizeMake(self.view.frame.size.width, 30)
    flowLayout.scrollDirection = UICollectionViewScrollDirection.Vertical
    collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: flowLayout)
    collectionView.dataSource = self
    collectionView.delegate = self
    collectionView.registerClass(FuncViewCell.self, forCellWithReuseIdentifier: "collectionView")
    collectionView.backgroundColor = UIColor.clearColor()
    collectionView.registerClass(SupplementaryView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "headerView")
    collectionView.registerClass(SupplementaryView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionFooter, withReuseIdentifier: "footerView")
    self.view.addSubview(collectionView)
}

Для каждого дополнительного вида я пишу это:

func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
    var view:SupplementaryView?
    var title:String = ""
    switch kind {
    case UICollectionElementKindSectionFooter:
        view = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "footerView", forIndexPath: indexPath) as? SupplementaryView
        view?.backgroundColor = UIColor ( red: 0.9879, green: 0.3225, blue: 0.4925, alpha: 1.0 )
        title = "Footer"
    default:
        view = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "headerView", forIndexPath: indexPath) as? SupplementaryView
        view?.backgroundColor = UIColor ( red: 0.6571, green: 1.0, blue: 0.8628, alpha: 1.0 )
        title = "Header"
    }
    switch indexPath.section {
    case 0:
        title = "First \(title)"
    default:
        title = "Second \(title)"
    }
    view?.setTitle(title)
    return view!
}

И мой дополнительный вид реализован следующим образом:

class SupplementaryView: UICollectionReusableView{
var titleLabel:UILabel!
override init(frame: CGRect) {
    super.init(frame: frame)
    titleLabel = UILabel(frame: frame)
    self.addSubview(titleLabel)
    let gesture = UITapGestureRecognizer(target: self, action: #selector(SupplementaryView.tap))
    self.addGestureRecognizer(gesture)
}

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

func setTitle(title:String){
    print("Label's frame is\(titleLabel.frame)")
    titleLabel.text = title
}

func tap(){
    print("\(titleLabel.text!) tapped")
}}

PS: я печатаю рамку каждой текстовой метки, они находятся в правильном положении. введите здесь описание изображения.


person lwiu    schedule 28.07.2016    source источник


Ответы (1)


Измените код, как показано ниже, и посмотрите, работает ли он.

override init(frame: CGRect) {
     super.init(frame: frame)
    // There should be self.bounds
     titleLabel = UILabel(frame: self.bounds)
     self.addSubview(titleLabel)
     let gesture = UITapGestureRecognizer(target: self, action: #selector(SupplementaryView.tap))
     self.addGestureRecognizer(gesture)
}
person zylenv    schedule 28.07.2016
comment
Я только что попробовал, и это сработало! Вы спасли мой день! Я потратил на это не один день! - person lwiu; 28.07.2016