很多時候我們總是需要一些控件從右往左排列,比方說這樣:
(Ps:紅線的位置... 這個其實就是 一個imageView + 一個label 下文所說的imageView就是指的上面的小綠點,label是指的這個100米) ?其中100米是會變化的,那么問題就來了如果是1000米,10000米,100000米....咋辦啊??好吧,1千米我們不用寫成1000米,但是要顯示 北京協(xié)和醫(yī)院 這樣的文本還是有問題的...
方法1
計算文本的長度,然后修改label frame 然后再去計算出iamgeView的位置,比方說這樣
(其中的sizeOfString..計算字體長度的一個函數(shù)而已..)這樣每次cell的出現(xiàn)都會重新計算一次位置,并且這個cell是上面我并沒有用autoLayout用的是autoresizing.如果是autoLayout估計還會有問題~~其實說白了就是自己算.
方法2
今天我在群里面問了一句上面的問題,并且提出 方法1 實現(xiàn)起來有點太雞肋了.這樣挺容易出問題的..于是我開始研究了一下autoLayout中的一個細節(jié)看下圖
先添加上一個一個約束,我們這個label的依賴肯定是設置成依賴于右面和上面的寬度和高度是不變的(暫時不變)
然后在看下面的演示
看一下鼠標停留的地方添加上對應的一個約束(autoLay相關的可以看這里autoLayout)之后是能選擇Greater Than Or Equal .. 然后我們設置imageView的約束是依賴于label
一定要注意上面設置成Greater Than Or Equal..然后代碼中寫成這個樣子
?這樣出來的效果就是:(知道為什么手機上查看的時候這張圖效果圖和下面的圖片順序不對)
其中l(wèi)ocationDistanceLabel就是上面的label?話說方法二 已經(jīng)完成了..
方法3
這個是 iOS 7以上才能使用的一個方法NSTextAttachment.這個類是UIKit 里面實現(xiàn)圖文混排的一個類,點開對應的一個類看到了這個
這個說明NSTextAttachment是支持image 的,那么問題就簡單多了.直接上代碼看看各位就應該明白了這個類是支持直接圖文拼接的(是不是有一種從NSURLConnection 到 AFNetWorking的感覺?).
出來的效果是這樣的...
三個富文本字符串就連接到一起了.方法3已經(jīng)完成.. 小提示:如果你是在cell上面使用方法3那么切記要注意的是cell的重用會不會一直初始化NSAttributedString和NSTextAttachment對象..如果是那么會頓卡的....
本人才疏學淺,上面的方法要是還有更好的希望能告訴我.謝謝了.另外我還是要說一下,如果是cell上面使用的話.比較推薦的方式是 方式2 , 因為方式3 雖然簡單但是貌似每次都要進行多個NSMutableAttributedString的初始化操作,這個還是很浪費資源的.
參考文章:Textkit實現(xiàn)圖文混排. 感謝重陽(博客)一起討論相關問題.