Ich versuche, eine UIImageView zu erhalten, um seine Höhe dynamisch nach dem Bild zu ändern, das es gegeben wird. Das UIImageView befindet sich in einer benutzerdefinierten Zelle.Autoresizing UIImageView in einer TableView-Zelle mit Autolayout
Hier sind die Randbedingungen:
- muss von der Kante des Bildschirms zur anderen Kante erstrecken.
- Die Höhe muss dynamisch sein und darf die Rahmenbreite nicht überschreiten.
Bisher habe ich die folgenden Einschränkungen die UIImageView mit dem Interface Builder hinzugefügt:
ich die Höhe Beschränkung im Code verwenden (im Folgenden als postHeight
) die Höhe des ändern UIImageView wie unten gezeigt:
import UIKit
class ImageTableViewCell: UITableViewCell {
@IBOutlet weak var postImage: UIImageView!
@IBOutlet weak var postHeight: NSLayoutConstraint!
var post:UIImage! = nil {
didSet {
let x = post.size.width
let y = post.size.height
var newHeight = (y/x) * self.frame.width
newHeight = newHeight > self.frame.width ? self.frame.width : newHeight
postHeight.constant = newHeight
postImage.contentMode = .ScaleAspectFit
postImage.image = post
}
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
Beim Ausführen zeigt die Konsole, dass es einige Einschränkungen nicht erfüllen konnte. Und Ausgänge:
TryImageView[89952:2477907] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x7aef8560 V:[UIImageView:0x7aef96b0(291.355)]>",
"<NSLayoutConstraint:0x7aef9b30 UIImageView:0x7aef96b0.top == UITableViewCellContentView:0x7aef9340.topMargin - 8>",
"<NSLayoutConstraint:0x7aef9b90 UITableViewCellContentView:0x7aef9340.bottomMargin == UIImageView:0x7aef96b0.bottom - 8.5>",
"<NSLayoutConstraint:0x7ae5e990 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7aef9340(291)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7aef8560 V:[UIImageView:0x7aef96b0(291.355)]>
Die Tabellenansicht hat dies in seiner viewDidLoad(), da die Zellen als auch auf die Größe benötigen.
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.estimatedRowHeight = 90
self.tableView.rowHeight = UITableViewAutomaticDimension
}
Irgendwelche Ideen, warum meine Einschränkungen nicht funktionieren? Dank