demo中采用的大都是工裝圖,畢竟我是喜歡工裝的農(nóng)民工。(猜猜哪個(gè)是我)
最近在用CollectionView寫(xiě)一個(gè)可以自動(dòng)識(shí)別文字和圖片高度的瀑布流。
在cell中根據(jù)當(dāng)前cell寬度用Masonry設(shè)置image的寬、高的時(shí)候昆码,在沒(méi)有滑動(dòng)界面的時(shí)候是沒(méi)問(wèn)題的。如圖所示:
但是當(dāng)我滑動(dòng)Collectionview,就發(fā)現(xiàn)報(bào)錯(cuò)赋咽,并且圖片顯示也出現(xiàn)問(wèn)題旧噪,寬度跟cell寬度并不一樣:
報(bào)錯(cuò):
Try this:?
(1) look at each constraint and try to figure out which you don't expect;?
(2) find the code that added the unwanted constraint or constraints and fix it.?
MASLayoutConstraint:0x6000000b0c80 UIImageView:0x7fe9f6f4f1e0.height == 65.9022
MASLayoutConstraint:0x6040000a9b40 UIImageView:0x7fe9f6f4f1e0.height == 177.5
根據(jù)打印結(jié)果大概知道是設(shè)置了兩次UIimageview的高度,出現(xiàn)了約束沖突脓匿,但從代碼上看來(lái)我只設(shè)置了一次淘钟,網(wǎng)上查了下類似的問(wèn)題,但是解決辦法都是說(shuō)設(shè)置約束的優(yōu)先級(jí)priority()陪毡,我設(shè)置之后雖然不報(bào)錯(cuò)米母,但是圖片顯示還是有問(wèn)題。
最后發(fā)現(xiàn)是因?yàn)閏ell復(fù)用毡琉,復(fù)用的cell中的imgView控件仍含有之前設(shè)置的約束铁瞒,所以就產(chǎn)生沖突了。
知道了問(wèn)題在哪就好辦了桅滋,在cell中設(shè)置image的時(shí)候慧耍,先取得imgView的所有約束,然后刪除丐谋,最后重新設(shè)置約束蜂绎,就沒(méi)問(wèn)題了。(本來(lái)想做個(gè)判斷笋鄙,只在復(fù)用的cell中刪除約束,但暫時(shí)還不知道如何拿到復(fù)用的cell怪瓶,所以就直接對(duì)所有cell進(jìn)行操作)代碼如下:
修改之后圖片顯示就沒(méi)問(wèn)題了
當(dāng)然萧落,取消cell復(fù)用也是可以的,但是當(dāng)數(shù)據(jù)量過(guò)多的時(shí)候洗贰,內(nèi)存會(huì)過(guò)大找岖,所以不考慮這種方法了。
另附瀑布流demo地址:CollectionView瀑布流