2017-10-14 2 views
5

J'ai créé un projet de vue unique et ajouté une collectionView. Je me suis inscrit une sous-classe simple UICollectionReusableViewiOS11 UICollectionSectionHeader indicateur de défilement de l'affichage

final class TestReusableView: UICollectionReusableView { 
    override init(frame: CGRect) { 
    super.init(frame: frame) 
    backgroundColor = UIColor.red 
    } 
    ... 
} 

Set et délégué à la source de données auto

extension ViewController: UICollectionViewDataSource { 
    func numberOfSections(in collectionView: UICollectionView) -> Int { 
    return 1 
    } 

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return 100 
    } 

    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { 
    let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: kHeader, for: indexPath) 
    return headerView 
    } 

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) 
    cell.backgroundColor = UIColor.blue 
    return cell 
    } 
} 

extension ViewController: UICollectionViewDelegateFlowLayout { 
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize { 
    return CGSize(width: collectionView.bounds.width, height: 88) 
    } 
} 

Le résultat est l'en-tête de la section semble être positionné au-dessus de l'indicateur de défilement vertical. Cependant, si je cours l'application contre un simulateur 10.3.1, le comportement fonctionne comme je m'attendais.

Red section header is on top of the scroll indicator

+0

J'ai aussi rencontré problème similaire avec iOS 11.0 où en-tête de la section est positionnée au-dessus de toutes les vues. Tout fonctionne bien dans 10.3. – Aks

+2

Apparemment ressemble à iOS 11.0 + problème. Je cours dedans aussi. RADAR le plus proche que je peux trouver est le suivant: http://www.openradar.me/34308893 – isoiphone

Répondre

1

Je ne pouvais pas l'essayer mais pouvez-vous essayer d'ajouter ceci à votre viewDidLoad():

let flow = collectionView.collectionViewLayout as! UICollectionViewFlowLayout 
flow.sectionHeadersPinToVisibleBounds = true 
+0

Cela ne fait que épingler l'en-tête de la section en haut de la collectionView. Le problème en question est que les en-têtes de section coupent l'indicateur de défilement vertical – CoderNinja

0

Eh bien, même j'ai rencontré le même problème dans mon application et il a été prévu pour une sortie en 2 semaines. Je ne pouvais pas avoir le temps de faire des recherches sur les raisons pour lesquelles cela échoue seulement dans iOS 11. D'où le travail rapide que j'ai fait est de remplacer l'utilisation de headerView par footerView puisque footerView n'a pas ce problème.

4

cela fonctionne pour moi:

- (void)collectionView:(UICollectionView *)collectionView willDisplaySupplementaryView:(UICollectionReusableView *)view forElementKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath { 
    if (SystemVersionGraterOrEqual(11)) { 
     if ([elementKind isEqualToString:UICollectionElementKindSectionHeader]) { 
      view.layer.zPosition = 0; 
    } 
} 

}

+0

Bonne prise, bien que tout le problème semble être un bug, parce que jouer avec la position z ne devrait pas être nécessaire. –