2017-02-21 2 views
1

UICollectionview이 있고 열 수가 무작위로 변경됩니다. 열 개수가 변경 될 때마다 다음 함수를 호출합니다.열 개수가 변경되면 UICollectionView가 충돌 함

func setTheCollectionViewSize(){ 



    if self.activeLockerList.count > 0 { 
     self.btnLockerDropdown.setTitle("Lockers Set \(self.activeLockerList[0].lockerId)", for: UIControlState.normal) 
    } 

    screenSize = UIScreen.main.bounds 
    screenWidth = screenSize.width 
    screenHeight = screenSize.height 


    //if the collection view layout is not invalidated then the app will crash 


    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout() 
    layout.minimumInteritemSpacing = 0 
    layout.minimumLineSpacing = 0 

    //setting the collectionview size so there will be no white lines in the drawn boxes 
    var appropriateScreenWidth = Int(self.screenWidth) 
    while appropriateScreenWidth % Int(self.numberOfLockersPerColumn) != 0 { 
     appropriateScreenWidth = appropriateScreenWidth - 1 
    } 

    let itemWidth : CGFloat = CGFloat(appropriateScreenWidth)/self.numberOfLockersPerColumn 
    collectionViewWidthLocal.constant = CGFloat(appropriateScreenWidth) 
    layout.itemSize = CGSize(width: itemWidth, height: itemWidth) 
    print(self.numberOfLockersPerColumn) 
    print(screenWidth) 

    layout.minimumInteritemSpacing = 0 
    layout.minimumLineSpacing = 0 
    layout.sectionInset = UIEdgeInsets(top: 10.0, left: 0, bottom: 10.0, right: 0) 

    self.collectionView.collectionViewLayout.invalidateLayout() 

    self.collectionView.setCollectionViewLayout(layout, animated: false) 

} 

각 행의 셀 수가 증가하면 올바르게 작동합니다. 하지만 카운트가 줄었을 때 앱이 다운되는 경우 self.collectionView.setCollectionViewLayout(layout, animated: false)

self.collectionView.collectionViewLayout.invalidateLayout()으로 콜렉션 뷰를 무효화하는 방법도 도움이되지 않습니다. 운 좋게도 시간과 시간을 보냈습니다. 미리 감사드립니다.

+0

'self.collectionView.collectionViewLayout.invalidateLayout()'을 사용하면 도움이 될 것입니다. 그것은 이상하게 작동하지 않았다. 기다리고 커뮤니티의 답을 보도록하겠습니다. –

+0

정확히 충돌이 발생합니까? 충돌 출력/오류 란 무엇입니까? – shallowThought

답변

2

collectionView.reloadData() 이전에 setTheCollectionViewSize() 함수를 호출 했습니까?

다음 순서에 따라야합니다. 시도하고 알려주세요.

self.collectionView.reloadData() 
self.collectionView.collectionViewLayout.invalidateLayout() 

그것이 당신을 도움이되기를 바랍니다 collectionview을 무효화 할 때 즉

self.collectionView.reloadData() 
self.setTheCollectionViewSize() 

순서해야 다음과 같습니다.

관련 문제