2017-10-14 5 views
5

Utworzono projekt pojedynczego widoku i dodano kolekcjęViewView. Zarejestrowałem prosty podklasę UICollectionReusableViewZnacznik przewijania UCLEIClectionSectionHeader Clipper

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

Set DataSource i przenoszą na siebie

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) 
    } 
} 

Rezultatem jest nagłówek sekcja wydaje się być umieszczona powyżej pionowej wskaźnik przewijania. Jeśli jednak uruchomię aplikację na symulatorze 10.3.1, zachowanie będzie działać tak, jak się spodziewam.

Red section header is on top of the scroll indicator

+0

Mam również napotkał podobny problem z iOS 11,0 gdzie sekcja nagłówka jest umieszczony powyżej wszystkich widokach. Wszystko działa dobrze w 10.3. – Aks

+2

Zdecydowanie wygląda na problem z iOS 11.0+. I ja też na to wpadam. Najbliższy RADAR, jaki mogę znaleźć, to: http://www.openradar.me/34308893 – isoiphone

Odpowiedz

1

nie mogłem go wypróbować, ale można spróbować dodać to do viewDidLoad():

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

Po prostu przypina nagłówek sekcji do górnej części kolekcjiView. Problem polega na tym, że nagłówki sekcji przycinają pionowy wskaźnik przewijania. – CoderNinja

0

Więc nawet natknąłem się ten sam problem w moim app i to trafi do kin w 2 tygodnie. Nie mogłem mieć czasu, by przeprowadzić badania na temat tego, dlaczego jest to nieskuteczne tylko w iOS 11. Stąd szybka praca wokół której zrobiłem to zastąpienie użycia headerView stopką, ponieważ footerView nie ma tego problemu.

4

działa to dla mnie:

- (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

Dobre złapanie, chociaż cały problem wydaje się być błędem, ponieważ gra z pozycją z nie powinna być konieczna. –