我试图在下面制作一个UITableViewCell
,它将根据其内容视图调整其高度。中心的图像应与细胞框架一样宽,并按比例调整其高度。
正如您所看到的,单元格中的图像并不像我想要的那样显示。我尝试在UIImageView
中将override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
的高度设置为320.0,但根本没有帮助。
问题:如何让细胞尊重图像的高度?
供参考:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
UIImageView
或其他任何事情设置高度限制,我只使用填充来安排视图。修改
我进一步向图片添加了高度约束:
class MyTableViewPostCell: UITableViewCell {
@IBOutlet weak var contentLabel: UILabel!
@IBOutlet weak var pictureImageView: UIImageView!
@IBOutlet weak var pictureImageViewHeightConstraint: NSLayoutConstraint!
}
class MyTableViewController: UITableViewController {
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("MyTableViewPostCell") as MyTableViewPostCell
cell.contentLabel.text = "This is a very very very very very very very long content."
cell.pictureImageViewHeightConstraint.constant = 320
cell.pictureImageView.sd_setImageWithURL(NSURL(string: "http://somedomain.com/pic"))
return cell
}
}
运行时遇到约束冲突错误。见下文:
(
"<NSLayoutConstraint:0x7ff7b5026c30 V:[UIImageView:0x7ff7b50289e0(40)]>",
"<NSLayoutConstraint:0x7ff7b5029a90 V:[UIImageView:0x7ff7b5029990(320)]>",
"<NSLayoutConstraint:0x7ff7b502a630 UIImageView:0x7ff7b50289e0.top == UITableViewCellContentView:0x7ff7b5028910.topMargin + 6>",
"<NSLayoutConstraint:0x7ff7b502a770 V:[UIImageView:0x7ff7b50289e0]-(12)-[UILabel:0x7ff7b5029390'This is a very very very ...']>",
"<NSLayoutConstraint:0x7ff7b502a950 V:[UILabel:0x7ff7b5029390'This is a very very very ...']-(10)-[UIImageView:0x7ff7b5029990]>",
"<NSLayoutConstraint:0x7ff7b502aa40 UITableViewCellContentView:0x7ff7b5028910.bottomMargin == UILabel:0x7ff7b5029c20'Label'.bottom + 10>",
"<NSLayoutConstraint:0x7ff7b502aa90 V:[UIImageView:0x7ff7b5029990]-(17)-[UILabel:0x7ff7b5029c20'Label']>",
"<NSLayoutConstraint:0x7ff7b2cae430 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7ff7b5028910(283.5)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7ff7b5029a90 V:[UIImageView:0x7ff7b5029990(320)]>
我不知道UIView-Encapsulated-Layout-Height
来自何处,但似乎是导致冲突。有任何解决这个问题的方法吗?谢谢!
答案 0 :(得分:6)
适用于iOS 7及以下版本
使用AutoLayout并正确添加约束,然后使用UITableViewCellHeightForRow
方法获得动态高度。
适用于iOS 8及以上版本
tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension