UICollectionView sizeForItemAt IndexPath

Saya mencoba mengatur ukuran sel saya sesuai dengan apa yang ada di dalamnya. Ini adalah kode saya dan macet dan saya tidak dapat menemukan pesan kesalahan.

extension TimelineCollectionVC: UICollectionViewDelegateFlowLayout {



func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "timeline", for: indexPath) as? Timeline

    cell?.textView.translatesAutoresizingMaskIntoConstraints = true
    cell?.textView.sizeToFit()



    if cell?.containerView.subviews.count == 0 {
        cell?.containerHeight.constant = 1
    } else {
        cell?.containerHeight.constant = (cell?.containerView.subviews.first?.frame.size.height) ?? 80
    }

    let cellHeight = (cell?.upperView.bounds.height)! + (cell?.textView.bounds.height)! + (cell?.containerView.bounds.height)! + (cell?.lowerView.bounds.height)!


    return CGSize(width: 375, height: cellHeight)



}

}

Anda tidak boleh menggunakan

extension TimelineCollectionVC: UICollectionViewDelegateFlowLayout {



func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "timeline", for: indexPath) as? Timeline

    cell?.textView.translatesAutoresizingMaskIntoConstraints = true
    cell?.textView.sizeToFit()



    if cell?.containerView.subviews.count == 0 {
        cell?.containerHeight.constant = 1
    } else {
        cell?.containerHeight.constant = (cell?.containerView.subviews.first?.frame.size.height) ?? 80
    }

    let cellHeight = (cell?.upperView.bounds.height)! + (cell?.textView.bounds.height)! + (cell?.containerView.bounds.height)! + (cell?.lowerView.bounds.height)!


    return CGSize(width: 375, height: cellHeight)



}
di sini. Itu hanya untuk membuat sel-sel baru. Dalam hal ini Anda ingin mendapatkan sel yang sudah ada dan mungkin harus menggunakan _2_ di kelas _3_.


person Mohammed Asheeba    schedule 13.05.2017    source sumber
comment
Gunakan debugger dan telusuri kodenya. BTW - tidak ada alasan untuk menjadikan _1_ dan opsional. Jika ini sebenarnya bukan instance _2_, Anda ingin instance tersebut mogok karena itu jelas merupakan bug di aplikasi Anda. Kemudian Anda dapat membuang semua _3_ yang tidak perlu di semua _4_ referensi. Dan kemudian Anda dapat menyingkirkan operator _5_ yang jahat itu (yang berarti mogok di sini).   -  person Scott Thompson    schedule 13.05.2017
comment
@ScottThompson Saya tidak mendapatkan log kerusakan, itu hanya mogok dan menampilkan kelas AppDelegate saya (Thread1: EXC_BAD_ACCESS~)   -  person rmaddy    schedule 13.05.2017
comment
@rmaddy menghapus tanda masih macet jika saya mengembalikan CGSize(lebar: 375, tinggi: 600) tanpa ada apa pun di sana, itu berfungsi dengan baik. tetapi begitu sel terlibat, terjadi kerusakan dan tidak ada alasan yang ditampilkan   -  person Mohammed Asheeba    schedule 13.05.2017
comment
Saya mengalami masalah serupa, tetapi hanya ketika saya menggunakan teks yang diatribusikan pada ponsel saya. Anda harus menggunakan let sizingView = Bundle.main.loadNibNamed(MyNib, owner: self, options: nil)?[0] sebagai? Sel saya   -  person Mohammed Asheeba    schedule 13.05.2017
comment
biarkan sizingView = Bundle.main.loadNibNamed(MyNib, owner: self, options: nil)?[0] as? MyCell tetapi ini tidak mengatasi masalahnya   -  person Ryan Heitner    schedule 31.07.2017


Jawaban (1)


Bisakah Anda memposting log kerusakan, atau setidaknya bagian atas log kerusakan?

person Scott Thompson    schedule 13.05.2017
comment
alasan: '-[NSCFString setSizeHasBeenSet:]: pemilih tidak dikenal dikirim ke instance 0x610000076bc0' *** Tumpukan panggilan lemparan pertama: ( 0 CoreFoundation 0x0000000109dd9d4b __ExceptionPreprocess + 171 1 libobjc.A.dylib 0x00000001094d921e obj c_Exception_throw + 48 2 Yayasan Inti 0x0000000109e49f04 -[ NSObject(NSObject) didNotRecognizeSelector:] + 132 3 CoreFoundation 0x0000000109d5f005 ___forwarding_ + 1013 4 CoreFoundation 0x0000000109d5eb88 _CF_forwarding_prep_0 + 120 5 UIKit 0x00000001080d 9485 -[UICollectionViewFlowLayout _getSizingInfosWithExistingSizingDictionary:] + 3691 6 UIKit 0x00000001080da97b -[UICollectionViewFlowLayout _fetchItemsInfoForRect:] + 127 7 UIKit 0x00000001080d3504 -[UICollectionViewFlowLayout PrepareLayout] + 273 8 UIKit 0x00000001080f3d6c -[UICollectionViewData _prepareToLoadData] + 159 9 UIKit 0x00000001080f4618 -[UICollectionViewData validasiLayoutInRect:] + 57 10 UIKit 0x00000001 0809b6d4 -[UICollectionView layoutSubviews] + 232 11 UIKit 0x0000000107817ab8 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1237 12 QuartzCore 0x0000000106fcdbf8 -[CALayer layoutSublayers] + 146 13 QuartzCore 0x0000000106fc1440 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 14 QuartzCore 0x0000000106fc1 2be _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 15 QuartzCore 0x0000000106f4f318 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 280 16 QuartzCore 0x0000000106f7c3ff _ZN2CA11 action6commitEv + 475 17 QuartzCore 0x0000000106f7cd6f _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 113 18 CoreFoundation 0x0000000109d7e267 CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALL KEMBALI_FUNGSI< /kuat> + 23 19 CoreFoundation 0x0000000109d7e1d7 __CFRunLoopDoObservers + 391 20 CoreFoundation 0x0000000109d628a6 CFRunLoopRunSpecific + 454 21 UIKit 0x000000010774caea -[UIApplication _run] + 434 22 UIKit 0x0000000107752c68 UIApplicationMain + 159 23 Moden 0x0000000104ab4fbf main + 111 24 libdyld.dylib 0x000000010ad4e68d start + 1 ) libc+ +abi.dylib: diakhiri dengan pengecualian tipe NSException (lldb) yang tidak tertangkap - person Ryan Heitner; 31.07.2017