我正在尝试创建应用,它将在表格视图中显示图像。 我有图像视图的自定义单元格。它只需从url下载图像数据:
@IBOutlet weak var tweetImage: UIImageView!
var imageData : MediaItem? { didSet { updateUI() }}
func updateUI(){
tweetImage.image = nil
if let url = imageData?.url {
if let data = NSData(contentsOfURL: url) {
tweetImage.image = UIImage(data: data)
}
}
}
我需要在下载后更改单元格高度。它必须等于图像的高度。我在viewController中设置了自动维度:
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = tableView.rowHeight
tableView.rowHeight = UITableViewAutomaticDimension
}
我为图像设置了“方面适合度”,我得到了奇怪的结果。图像超出了细胞的边界。也许我需要设置一些限制......我不知道。
结果:
但我需要这个:
答案 0 :(得分:7)
如果要加载图像异步:
加载并设置新的UIImage
后,您可以通过UITableView
函数重新加载特定的单元格:
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
在你的UIViewController中:
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = tableView.rowHeight
tableView.rowHeight = UITableViewAutomaticDimension
NSNotificationCenter.defaultCenter().addObserver(self, selector: "imageDidLoadNotification:", name:"CellDidLoadImageDidLoadNotification", object: nil)
}
func imageDidLoadNotification(notification: NSNotification) {
if let cell = notification.object as? UITableViewCell
let indexPath = tableView.indexPathForCell(cell) {
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
}
}
在你的UITableViewCell
中func updateUI(){
tweetImage.image = nil
if let url = imageData?.url {
if let data = NSData(contentsOfURL: url) {
tweetImage.image = UIImage(data: data)
NSNotificationCenter.defaultCenter().postNotificationName("CellDidLoadImageDidLoadNotification", object: self)
}
}
}
答案 1 :(得分:1)
如果您想将dinamic表与UITableViewAutomaticDimension
一起使用,则需要正确设置约束(image)。 (正确的宽度和高度,我建议你使用宽高比)
使用静态表视图,您应该实现optional func tableView(_ tableView: UITableView,
heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
,并手动计算单元格大小。
答案 2 :(得分:1)