錯誤信息:
Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [0 nan]'
原因:CALayer的position位置中包含有不存在的數(shù),說白了就是View.frame 計算時存在了問題风范,有的地方除以0了。
當(dāng)我打斷點(diǎn)找到引發(fā)奔潰的那個控件時喜颁,打印它的Size信息(345.0, inf)
皆怕,其中高度為inf曹步,也就是是高度計算的結(jié)果引發(fā)了奔潰的問題,因為服務(wù)器返回的圖片寬度為0導(dǎo)致計算錯誤,也就是某個地方除以了0導(dǎo)致的, 當(dāng)為0的時候判斷下再處理即可解決
// 計算collectionView的尺寸
func caculatePicViewSize(imgList: [XYTrendImgItem]) -> CGSize {
// 以內(nèi)容的寬度為準(zhǔn)舒裤,等比例計算高度
if imgList.count == 0 {
return CGSize.zero
}
if imgList.count == 1 {
if let width = imgList.first?.imgSize.width, let height = imgList.first?.imgSize.height {
let oneImageHeight = contentViewWidth / width * height
return CGSize.init(width: contentViewWidth, height: oneImageHeight)
}
}
let picViewW = contentViewWidth
var picViewH : CGFloat = 0.0;
var imgWidth : CGFloat = 0.0
for item in imgList {
imgWidth = item.imgSize.width
// 計算每一個圖片的等比例高度
// 注意: 此處需要判斷服務(wù)器返回的width是否為0 队塘,如果為0袁梗,就讓其為內(nèi)容視圖的寬度,不然為0 時 使用除法會保存
if imgWidth == 0 {
imgWidth = contentViewWidth
}
let oneImageHeight = contentViewWidth / imgWidth * item.imgSize.height
picViewH += oneImageHeight
print(imgWidth, oneImageHeight)
}
picViewH += CGFloat(imgList.count - 1) * SIZE_PICMARGIN
print(picViewH, CGFloat(imgList.count - 1))
return CGSize.init(width: picViewW, height: picViewH)
}