2016-05-25 22 views
0

私はUITableViewCellサブクラスを持っています。これはすべてビューでコードを設定し、NSLayoutConstraintsを追加します。 UITabbleViewCellが高さを正しく計算していないことを除いて、すべてが機能しています。自動レイアウトの制約があるUITableViewCellサブクラスが正しくない高さ

ここでは、しかし、そのはUITableViewCellboundsの外に表示すべきであるとセルが44

の高さにとどまるとして miniPictureView表示されている何が起こる 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)) 
} 

のコードがあります

答えて

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. 彼らは、自己のサイジングが動作するためには、あなたをcontentViewまたは兄弟ビュー

  2. を伴わないので、あなたのminiPictureView制約は、miniPictureView自体に追加する必要がありますcontentViewの上部から下部まで完全な制約のチェーンを持たなければなりません。したがって、miniPictureViewcontentViewの下に等値制約を追加する必要があります。そのため、コンテンツビューの下部を実際に押し込む制約があります。

  3. 最後の2行が役に立たないと思われます。 contentViewの高さは、上端と下端がその内容に制限されていることによって設定する必要があります。そして、セルとそのcontentViewを一緒に拡大縮小するために自動サイズ調整マスクが使用されます。これをfalseに設定した場合は、少なくとも、レイアウトの計算後にセルのフレームをcontentViewフレームと等しくなるように設定するコードで置き換える必要があります。

+0

申し訳ありませんが、これを追加するのは忘れました。これはすでに設定済みです。私の他のすべての細胞は正常に機能します。ちょうど私がすべてのことをコードで行う場所です。 – Tander

+0

@タンダーは、いくつかの提案で私の答えを更新しました –

+0

助けてくれてありがとう、それぞれの提案に試してみて、報告して戻します – Tander

関連する問題