我有一个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的高度。
答案 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
还有几点说明:
您的miniPictureView
约束应添加到miniPictureView
本身,因为它们不涉及contentView
或兄弟视图
为了使自我调整工作,您还必须从contentView
的顶部到底部拥有完整的约束链。所以你应该在miniPictureView
和contentView
的底部之间添加一个等式约束,这样就会有一个约束实际上会推动内容视图的底部。
我怀疑你的最后两行没有帮助。 contentView
的高度应该由其顶部和底部边缘约束到其内容来建立。并且自动调整掩码用于将单元格及其contentView
缩放在一起。如果将其设置为false,则至少应将其替换为在计算布局后将单元格框架设置为等于contentView框架的代码。