2014-12-31 108 views
5

我正在嘗試製作一個如下所示的UITableViewCell,它將根據其內容視圖調整其高度。中心的圖像應與單元框架一樣寬,並按比例調整其高度。如何讓UITableViewCell調整高度以適應其內容?

enter image description here

正如你所看到的,在細胞圖像不顯示像我希望的方式。我試圖在override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell中將UIImageView的高度設置爲320.0,但根本沒有任何幫助。

問題:如何讓細胞尊重圖像的高度?

FYI:

  1. 我不重寫func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
  2. 我沒有設置高度約束到UIImageView或任何東西,我使用的墊襯只安排意見。
  3. 圖像顯示使用縱向適合模式。

編輯:

我進一步轉移到添加的高度約束圖片:

class MyTableViewPostCell: UITableViewCell { 
    @IBOutlet weak var contentLabel: UILabel! 
    @IBOutlet weak var pictureImageView: UIImageView! 
    @IBOutlet weak var pictureImageViewHeightConstraint: NSLayoutConstraint! 
} 

class MyTableViewController: UITableViewController { 
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 1 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("MyTableViewPostCell") as MyTableViewPostCell 
     cell.contentLabel.text = "This is a very very very very very very very long content." 
     cell.pictureImageViewHeightConstraint.constant = 320 
     cell.pictureImageView.sd_setImageWithURL(NSURL(string: "http://somedomain.com/pic")) 
     return cell 
    } 
} 

而且運行時,我得到了一個約束衝突錯誤。請看下圖:

(
    "<NSLayoutConstraint:0x7ff7b5026c30 V:[UIImageView:0x7ff7b50289e0(40)]>", 
    "<NSLayoutConstraint:0x7ff7b5029a90 V:[UIImageView:0x7ff7b5029990(320)]>", 
    "<NSLayoutConstraint:0x7ff7b502a630 UIImageView:0x7ff7b50289e0.top == UITableViewCellContentView:0x7ff7b5028910.topMargin + 6>", 
    "<NSLayoutConstraint:0x7ff7b502a770 V:[UIImageView:0x7ff7b50289e0]-(12)-[UILabel:0x7ff7b5029390'This is a very very very ...']>", 
    "<NSLayoutConstraint:0x7ff7b502a950 V:[UILabel:0x7ff7b5029390'This is a very very very ...']-(10)-[UIImageView:0x7ff7b5029990]>", 
    "<NSLayoutConstraint:0x7ff7b502aa40 UITableViewCellContentView:0x7ff7b5028910.bottomMargin == UILabel:0x7ff7b5029c20'Label'.bottom + 10>", 
    "<NSLayoutConstraint:0x7ff7b502aa90 V:[UIImageView:0x7ff7b5029990]-(17)-[UILabel:0x7ff7b5029c20'Label']>", 
    "<NSLayoutConstraint:0x7ff7b2cae430 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7ff7b5028910(283.5)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7ff7b5029a90 V:[UIImageView:0x7ff7b5029990(320)]> 

我不知道在哪裏UIView-Encapsulated-Layout-Height從何而來,但好像它是導致衝突的。有任何解決這個問題的方法嗎?謝謝!

+0

參見此信息:[使用自動佈局中的UITableView動態單元佈局&可變行高度(http://stackoverflow.com/questions/18746929/using - 自動佈局合的UITableView換動態小區的佈局-可變行高度) – zisoft

回答

5

對於iOS 7和下面

使用自動版式並適當添加約束,那麼使用用於動態高度UITableViewCellHeightForRow方法。

對於iOS 8及以上

tableView.estimatedRowHeight = 44.0 
tableView.rowHeight = UITableViewAutomaticDimension 
相關問題