UITableViewCell子类与自动布局约束不正确的高度

时间:2016-05-25 17:21:51

标签: swift uitableview swift2

我有一个UITableViewCell子类,我在代码中设置了所有视图,而不是添加NSLayoutConstraints。除UITabbleViewCell未正确计算其高度外,一切正常。

以下是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显示应该如何显示,但它显示在UITableViewCell的{​​{1}}之外且单元格保持在44的高度。

1 个答案:

答案 0 :(得分: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框架的代码。

相关问题