2016-05-25 99 views
0

我有一個UITableViewCell子類,我設置了代碼中的所有視圖,並添加NSLayoutConstraints到。一切正常,除非我的UITabbleViewCell沒有正確計算其高度。UITableViewCell子類與自動佈局約束不正確的高度

此處是UITableViewCell

override func updateConstraints() { 
    setupThumbnailImages() 

    super.updateConstraints() 


} 
func setupThumbnailImages() { 

    var imageViewXOrigin : CGFloat = 5.0 
    var imageViewYOrigin : CGFloat = 0.0 

    for thumbnailUrl in self.thumbnailsUrlArray { 

      let miniPictureView = UIImageView() 
      miniPictureView.backgroundColor = UIColor.blueColor() 
      miniPictureView.contentMode = UIViewContentMode.ScaleAspectFill 
      miniPictureView.clipsToBounds = true 
      miniPictureView.frame = CGRectMake(0, 0, 0, 0) 


      miniPictureView.translatesAutoresizingMaskIntoConstraints = false 



     if((imageViewXOrigin + 50) > frame.size.width){ 
      imageViewYOrigin += 50 
      imageViewXOrigin = 5 

     } 

     contentView.addSubview(miniPictureView) 
     contentView.addConstraint(NSLayoutConstraint(item: miniPictureView, attribute: .Leading, relatedBy: .Equal, toItem: contentView, attribute: .Leading, multiplier: 1, constant: imageViewXOrigin)) 
     contentView.addConstraint(NSLayoutConstraint(item: miniPictureView, attribute: .Top, relatedBy: .Equal, toItem: contentView, attribute: .Top, multiplier: 1, constant: imageViewYOrigin)) 
     contentView.addConstraint(NSLayoutConstraint(item: miniPictureView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .Height, multiplier: 1, constant: 50)) 
     contentView.addConstraint(NSLayoutConstraint(item: miniPictureView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .Width, multiplier: 1, constant: 50)) 

     let lastImage = thumbnailsUrlArray.last 
     if (lastImage == thumbnailUrl){ 
      contentView.addConstraint(NSLayoutConstraint(item: miniPictureView, attribute: .Bottom, relatedBy: .Equal, toItem: contentView, attribute: .Bottom, multiplier: 1, constant: 0)) 

     } 

      imageViewXOrigin += 50 

     } 

    contentView.translatesAutoresizingMaskIntoConstraints = false 
      contentView.addConstraint(NSLayoutConstraint(item: contentView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .Height, multiplier: 1, constant: imageViewYOrigin)) 
} 

會發生什麼是miniPictureView顯示器,因爲它應該的代碼,但其顯示的UITableViewCellbounds和電池保持在44。

的高度外

回答

2

如果您希望單元根據其內容確定其大小,請確保在UITableView上設置以下內容:

tableView.rowHeight = UITableViewAutomaticDimension 
tableView.estimatedRowHeight = 44.0 // Or any other estimate you want, just make sure to set this to some value 

一對夫婦更注意事項:

  1. miniPictureView限制應加miniPictureView本身,因爲它們不涉及contentView或兄弟姐妹視圖

  2. 爲了自調整大小工作,你也必須從contentView的頂部到底部有一個完整的約束鏈。所以你應該在miniPictureViewcontentView的底部之間加上一個相等約束,這樣就有一個約束,它實際上會推動內容視圖的底部。

  3. 我懷疑你最後兩行沒有幫助。 contentView的高度應該通過其頂部和底部邊緣限制其內容來確定。自動調整掩碼用於縮放單元格和它的contentView在一起。如果將其設置爲false,則至少應該用代碼將其替換爲將單元格框架設置爲等於計算佈局後的contentView框架的代碼。

+0

對不起,我忘了添加,我已經設置了。我所有的其他細胞工作正常。就在這個我用代碼完成所有事情的地方。 – Tander

+0

@Tander更新了我的回答,提供了一些更多的建議 –

+0

感謝您的幫助,我會給每個建議一個嘗試並報告回 – Tander

相關問題