2016-11-23 73 views
0

我有一個UITableViewCell,其中有多個數據組成垂直堆棧佈局。其中一些是垂直動態的,一個是UILabel,另一個是UIImageView。帶有AutoLayout的UITableViewCell中的動態圖像高度

UIImageView是我遇到的麻煩。我在UITableViewCell中設置了一個插口的高度約束。圖像加載異步,所以UITableViewCell行的高度將是錯誤的,我們只知道圖像加載後行的真正高度。當我設置約束後更新到適當的寬高比圖像加載後,我的UITableView變得完全不可靠,圖像跳躍到整個地方和格式不能很好地工作。

我遇到了StackOverflow中的另一篇文章,提到您應該預先檢查圖像,獲取它們的寬度和高度,以便我們可以確定並在圖像加載之前設置約束。這確實允許平滑滾動。

我的問題是:這是唯一的方法嗎?是否有更好的技術使用動態圖像尺寸的AutoLayout?他們會是什麼?

我試着調用setNeedsLayout,setNeedsUpdateConstraints,updateConstraintsIfNeeded等等......他們都沒有工作。

有什麼建議嗎?

詹姆斯

回答

2

如果您需要基於圖像大小來預測你的高度,那麼,你應該,如果你想設置佈局流暢動態的動畫和可接受的滾動性能預先檢查圖像。

例如,Pinterest在API響應中返回請求Pin的圖像大小,因爲他們希望您在圖像獲取異步之前設置佈局,實際上,他們在自己的iOS應用程序中執行相同的操作(您可以探索其API here )。 Pinterest API響應以及關於圖像的擴展信息的示例:

root:{} 1 item 
data:{} 5 items 
note:A hardened leather thimble to make stitching leather easier! 
url:https://www.pinterest.com/pin/310959549256036760/ 
image:{} 1 item 
    original:{} 3 items 
    url:https://s-media-cache-ak0.pinimg.com/originals/b2/19/ec/b219ec9b8418233c651de9d17bd00e4a.jpg 
    width:640 
    height:640 

第二個選項,使用「僞動態高度」。主要思想,你的單元高度總是可以預測和預先計算的,但單元格內的圖像具有動態大小。對於我最近在這裏縫製的這種解決方案最好的解釋是 - Self-sizing Table View Cells

+1

感謝您的輸入!我已經在iOS和Android上預先檢索了圖像的大小。似乎在平滑滾動方面運行良好。 –

+0

@JamesScott,不客氣! – dive