iOS-CollectionView 瀑布流實(shí)現(xiàn) 及 cell重用引起的約束沖突

demo中采用的大都是工裝圖,畢竟我是喜歡工裝的農(nóng)民工。(猜猜哪個(gè)是我)

最近在用CollectionView寫一個(gè)可以自動(dòng)識別文字和圖片高度的瀑布流。

在cell中根據(jù)當(dāng)前cell寬度用Masonry設(shè)置image的寬、高的時(shí)候,在沒有滑動(dòng)界面的時(shí)候是沒問題的。如圖所示:

圖1
圖2

但是當(dāng)我滑動(dòng)Collectionview,就發(fā)現(xiàn)報(bào)錯(cuò),并且圖片顯示也出現(xiàn)問題,寬度跟cell寬度并不一樣:

圖3
圖4

報(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)了約束沖突,但從代碼上看來我只設(shè)置了一次,網(wǎng)上查了下類似的問題,但是解決辦法都是說設(shè)置約束的優(yōu)先級priority(),我設(shè)置之后雖然不報(bào)錯(cuò),但是圖片顯示還是有問題。

最后發(fā)現(xiàn)是因?yàn)閏ell復(fù)用,復(fù)用的cell中的imgView控件仍含有之前設(shè)置的約束,所以就產(chǎn)生沖突了。

知道了問題在哪就好辦了,在cell中設(shè)置image的時(shí)候,先取得imgView的所有約束,然后刪除,最后重新設(shè)置約束,就沒問題了。(本來想做個(gè)判斷,只在復(fù)用的cell中刪除約束,但暫時(shí)還不知道如何拿到復(fù)用的cell,所以就直接對所有cell進(jìn)行操作)代碼如下:


圖5

修改之后圖片顯示就沒問題了


圖6

當(dāng)然,取消cell復(fù)用也是可以的,但是當(dāng)數(shù)據(jù)量過多的時(shí)候,內(nèi)存會(huì)過大,所以不考慮這種方法了。

另附瀑布流demo地址:CollectionView瀑布流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,171評論 4 61
  • 我曾多次向我媽表示我想養(yǎng)一只狗,每次!對,是每次!被拒絕的話都一字不變“不準(zhǔn)養(yǎng),臟死了,你要敢養(yǎng),我晚上就...
    格布登閱讀 336評論 0 0
  • 工作的你,忙得怎樣了?是事情多了,還是你不知道時(shí)間都怎么花掉的? 就快要拿第二次工資了,回想自己這段時(shí)間里了,除了...
    夢行動(dòng)物閱讀 278評論 0 0
  • 被那句“為人子女者,不懂醫(yī)為不孝;為人父母者,不懂醫(yī)為不慈。”所觸動(dòng),加上全家亞健康狀態(tài),我在2017年5月,開啟...
    lucy大人閱讀 1,141評論 16 50
  • 生活中的跌跌撞撞,不斷試錯(cuò),在工作中修行----最終是為了找到愉悅的靈魂! 郭相麟
    郭相麟閱讀 144評論 0 0

友情鏈接更多精彩內(nèi)容