>

이것이 저를 비 틀었습니다.

func updateCollectionView() {
    DispatchQueue.main.async { [weak self] in
        if let strongSelf = self {
            let layout = UICollectionViewFlowLayout()
            let minimumSpacing: CGFloat = 8
            layout.minimumInteritemSpacing = minimumSpacing
            layout.minimumLineSpacing = minimumSpacing
            let dim = strongSelf.view.frame.width / CGFloat(strongSelf.size) - minimumSpacing
            layout.itemSize = CGSize(width: dim, height: dim)
            strongSelf.collectionView.setCollectionViewLayout(layout, animated: true)
            strongSelf.collectionView.reloadData()
        }
    }
}

CollectionViewLayout을 설정하려고하면 다음과 같이 표시됩니다.

error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x800000000)

collectionView, strongSelf 및 layout은 모두 유효한 객체입니다. 도움이된다면 strongSelf.size가 4보다 작은 경우에도 마찬가지입니다.

  • 답변 # 1

    글쎄, 이건 나에게 이상한 것이었지만, 나는이 신사의 게시물을 사용하여 해결했다 :

    http://jaymayu.com/uicollectionview-and-dynamically-changing-layouts-on-runtime/

    기본적으로, 나는 이것을해야했다 :

    strongSelf.gridCollectionView.reloadData()
    strongSelf.gridCollectionView.collectionViewLayout.invalidateLayout()
    strongSelf.gridCollectionView.setCollectionViewLayout(layout, animated: false)
    
    

    중요한 것은 reloadData ()가 setCollectionViewLayout 전에 있어야한다는 것입니다. 이것이 왜 그런지 정확히 생각해야하지만 문제가 해결되었습니다.

  • 이전 swift3 - Alamofire에서 GET 메소드에 대한 맞춤 매개 변수를 보내는 방법은 무엇입니까?
  • 다음 javascript - 오류가 포함 된 짧은 jquery 코드 - 뭐가 잘못 되었 니?