Я хочу реализовать TableView с пользовательским TableViewCell, отображающим изображение.
Чтобы сделать это простым, я просто поместил UIImageView внутри tableviewcell, используя автозапуск (см. ниже).
Я хочу отображать изображение внутри UIImageView, но эти размеры изображений могут быть любыми и непоследовательными (портрет, пейзаж, квадрат)...
Поэтому я ищу для отображения изображения с фиксированной шириной (шириной устройства) и динамической высотой, которые соотносятся с отношением изображений. Я хочу что-то вроде этого:
Мне, к сожалению, не удалось достичь этого результата.
Вот как я его реализовал - (я использую Haneke для загрузки изображения из URL-изображения, хранящегося в Amazon S3):
class TestCellVC: UITableViewCell {
@IBOutlet weak var selfieImageView: UIImageView!
@IBOutlet weak var heightConstraint: NSLayoutConstraint!
func loadItem(#selfie: Selfie) {
let selfieImageURL:NSURL = NSURL(string: selfie.show_selfie_pic())!
self.selfieImageView.hnk_setImageFromURL(selfieImageURL, placeholder: nil, format: HNKFormat<UIImage>(name: "original"), failure: {error -> Void in println(error)
}, success: { (image) -> Void in
// Screen Width
var screen_width = UIScreen.mainScreen().bounds.width
// Ratio Width / Height
var ratio = image.size.height / image.size.width
// Calculated Height for the picture
let newHeight = screen_width * ratio
// METHOD 1
self.heightConstraint.constant = newHeight
// METHOD 2
//self.selfieImageView.bounds = CGRectMake(0,0,screen_width,newHeight)
self.selfieImageView.image = image
}
)
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Register the xib for the Custom TableViewCell
var nib = UINib(nibName: "TestCell", bundle: nil)
self.tableView.registerNib(nib, forCellReuseIdentifier: "TestCell")
// Set the height of a cell dynamically
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 500.0
// Remove separator line from UITableView
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None
loadData()
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("TestCell") as TestCellVC
cell.loadItem(selfie: self.selfies_array[indexPath.row])
// Remove the inset for cell separator
cell.layoutMargins = UIEdgeInsetsZero
cell.separatorInset = UIEdgeInsetsZero
// Update Cell Constraints
cell.setNeedsUpdateConstraints()
cell.updateConstraintsIfNeeded()
cell.sizeToFit()
return cell
}
Мой расчет динамической высоты правильный (я его распечатал). Я пробовал оба метода (описать в коде), но никто из них не работал:
- Установить ограничение автоопределения высоты в UIImageView
- Измените кадр UIImageView
См. результаты метода 1 и 2 здесь: