2017-04-23 162 views
2

我有UITableViewAutomaticDimension一個問題:UITableViewAutomaticDimension以編程方式添加圖像

在我的tableview我有多個imageviews與計算出的高度編程的方式創建:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "managePlayset", for: indexPath) as! ManagePlaysetTableViewCell 
    let playset = playsets[indexPath.row] 
    cell.playsetName.text = playset.name 
    if (playset.musicItems?.count)! > 0 { 
     var i = 0 

     for musicItem in (playset.musicItems?.array)! { 

      let imageView = UIImageView(image: (musicItem as! MusicItem).getFirstPhoto()) 
      imageView.frame = CGRect(x: cell.contentView.frame.origin.x+CGFloat(i)*(imageWidth+10.0), y: cell.contentView.frame.origin.y+40, width: imageWidth, height: imageWidth) 
      imageView.contentMode = .scaleAspectFit 
      cell.contentView.addSubview(imageView) 
      let constraint = NSLayoutConstraint(item: imageView, 
      attribute: NSLayoutAttribute.bottomMargin, relatedBy: 
      NSLayoutRelation.equal, toItem: cell.contentView, 
      attribute: NSLayoutAttribute.bottomMargin, multiplier: 1, 
      constant: 0) 
      cell.contentView.addConstraint(constraint) 

      i = i + 1 
     } 
    } 

    cell.editButton.tag = indexPath.row 
    return cell 
} 

在viewDidLoad中我設置:

let width = view.frame.width 
    imageWidth = width/CGFloat(maxItemsOnPage) - 10.0 
    tableView.estimatedRowHeight = imageWidth + 20.0 
    tableView.rowHeight = UITableViewAutomaticDimension 

但高度調整不當(圖像被切斷) 任何意見是高度讚賞!

+0

您需要添加約束(編程,因爲您要添加的'UIImageView's編程),定義了'UITableViewCell'的基於'UIImageView'的高度,高度(或任何確定的高度'UITableViewCell'。這是因爲'UITableViewAutomaticDimension'與約束一起工作。 –

+0

我以編程方式添加了約束,但由於某種原因它沒有幫助 –

回答

1

我認爲這是因爲UIImageView以編程方式創建。 然後它不使用自動佈局系統。 要更改它,您必須在循環中添加 imageView.translatesAutoresizingMaskIntoConstraints = false

0

你有沒有嘗試約束imageView的頂部和底部邊緣?即

let constraintTop = NSLayoutConstraint(item: imageView, 
     attribute: NSLayoutAttribute.top, relatedBy: 
     NSLayoutRelation.equal, toItem: cell.contentView, 
     attribute: NSLayoutAttribute.topMargin, multiplier: 1, 
     constant: 0) 
let constraintBottom = NSLayoutConstraint(item: imageView, 
     attribute: NSLayoutAttribute.bottom, relatedBy: 
     NSLayoutRelation.equal, toItem: cell.contentView, 
     attribute: NSLayoutAttribute.bottomMargin, multiplier: 1, 
     constant: 0) 
cell.contentView.addConstraints([constraintTop, constraintBottom]) 
相關問題