【发布时间】:2017-10-12 19:13:57
【问题描述】:
我正在尝试根据里面的内容设置单元格的大小 这是我的代码,它崩溃了,我找不到错误消息。
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)
}
}
原因:'-[NSCFString setSizeHasBeenSet:]:无法识别的选择器发送到实例 0x610000076bc0' *** 首先抛出调用堆栈: ( 0 核心基础 0x0000000109dd9d4b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x00000001094d921e objc_exception_throw + 48 2核心基础0x0000000109e49f04-[NSObject(NSObject)不识别选择器:]+132 3 核心基础 0x0000000109d5f005 ___forwarding_ + 1013 4 核心基础 0x0000000109d5eb88 _CF_forwarding_prep_0 + 120 5 UIKit 0x00000001080d9485-[UICollectionViewFlowLayout_getSizingInfosWithExistingSizingDictionary:] + 3691 6 UIKit 0x00000001080da97b-[UICollectionViewFlowLayout_fetchItemsInfoForRect:] + 127 7 UIKit 0x00000001080d3504-[UICollectionViewFlowLayout 准备布局] + 273 8 UIKit 0x00000001080f3d6c-[UICollectionViewData_prepareToLoadData] + 159 9 UIKit 0x00000001080f4618-[UICollectionViewData validateLayoutInRect:] + 57 10 UIKit 0x000000010809b6d4-[UICollectionView layoutSubviews] + 232 11 UIKit 0x0000000107817ab8-[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1237 12 QuartzCore 0x0000000106fcdbf8 -[CALayer layoutSublayers] + 146 13 石英核心 0x0000000106fc1440 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 14 石英核心 0x0000000106fc12be _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 15 石英核心 0x0000000106f4f318 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 280 16 石英核心 0x0000000106f7c3ff _ZN2CA11Transaction6commitEv + 475 17 石英核心 0x0000000106f7cd6f _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 113 18 核心基础 0x0000000109d7e267 CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION + 23 19 核心基础 0x0000000109d7e1d7 __CFRunLoopDoObservers + 391 20 核心基础 0x0000000109d628a6 CFRunLoopRunSpecific + 454 21 UIKit 0x000000010774caea-[UIApplication_run] + 434 22 UIKit 0x0000000107752c68 UIApplicationMain + 159 23 现代 0x0000000104ab4fbf 主要 + 111 24 libdyld.dylib 0x000000010ad4e68d 开始 + 1 ) libc++abi.dylib:以 NSException 类型的未捕获异常终止 (lldb)
【问题讨论】:
-
你能发布崩溃日志,或者至少是崩溃日志的顶部吗?
-
使用调试器并单步调试代码。顺便说一句 - 没有理由将
cell设为可选。如果它实际上不是Timeline实例,您希望它崩溃,因为这是您的应用程序中的一个明显错误。然后,您可以在所有cell引用中摆脱所有那些不必要的?。然后你就可以摆脱那些讨厌的!操作符(这意味着“在这里崩溃”)。 -
@ScottThompson 我没有收到崩溃日志,它只是崩溃并显示我的 AppDelegate 类(线程 1:EXC_BAD_ACCESS~)
-
@rmaddy 如果我返回 CGSize(width: 375, height: 600) 并且上面没有任何东西,则删除标记仍然会崩溃,它工作正常。但是一旦涉及到单元格就会发生崩溃并且没有显示任何原因
-
我遇到了类似的问题,但仅当我在单元格上使用属性文本时。您应该使用 let sizingView = Bundle.main.loadNibNamed("MyNib", owner: self, options: nil)?[0] as?我的细胞
标签: swift uicollectionview size cell