2017-02-21 12 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.setTheCollectionViewSize() 

collectionview

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

を無効にするときの順序である必要があり、それはあなたを助け願っています。

関連する問題