2017-10-14 2 views
5

단일 뷰 프로젝트를 생성하고 collectionView를 추가했습니다. I 자기iOS11 UICollectionSectionHeader 자르기 스크롤 인디케이터

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

에 UICollectionReusableView

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

세트 소스 위임 간단한 서브 등록 결과는 섹션 헤더는 수직 스크롤 표시 위에 위치 할 것으로 보인다. 그러나, 만약 내가 10.3.1 시뮬레이터에 대해 응용 프로그램을 실행하면, 행동은 기대했던대로 작동합니다.

Red section header is on top of the scroll indicator

+0

나는 또한 섹션 헤더는 모든 뷰 위에 위치 아이폰 OS 11.0와 유사한 문제가 발생했습니다. 10.3에서는 모든 것이 잘 작동합니다. – Aks

+2

확실히 iOS 11.0 이상의 문제입니다. 나는 그것에도 뛰어 들고있다. 가장 가까운 RADAR은 다음과 같습니다. http://www.openradar.me/34308893 – isoiphone

답변

1

나는 그것을 밖으로 시도하지 수 있지만, 당신은 당신의 viewDidLoad()이 추가 시도 할 수 있습니다 :

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

이것은 섹션 헤더를 collectionView의 맨 위에 고정시킵니다. 문제의 문제는 섹션 헤더가 수직 스크롤 인디케이터를 자르고 있다는 것입니다. – CoderNinja

0

잘 심지어 내 응용 프로그램에서 동일한 문제가 발생하여 그것을에서 출시 될 예정되었다 이주. 나는 이것이 iOS 11에서만 실패하는 이유에 대한 연구를 할 시간이 없었습니다. 따라서 footerView에는이 문제가 없으므로 headerView를 footerView로 대체하는 것이 빠른 작업입니다.

4

이 나를 위해 작동합니다

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

z 위치로 연주하는 것이 필요하지 않아야하기 때문에 전체 문제는 버그처럼 보일 수 있지만 잘 잡습니다. –