[英]Keep aspect ratio of an UIImageView in a custom UITableViewCell
[英]Custom UITableViewCell's UIImageView won't aspect fit until clicked on
我正在经历斯坦福大学的cs193p。 作业4让我们创建了一个自定义UITableVIewCell并将来自网络的图片加载到该单元格内的UIImageView中。
我的UIImageView和Cell在故事板上的内容模式设置为Aspect Fit.ImageView设置为自动布局以拥抱该单元。 但是,当图片第一次加载时,它将从UIImageView中渗出。 当我单击它时,它将正确适合方面。
我只是在分配图像之前尝试在代码中设置内容模式,但这也没有用。 我还尝试在分配图像后立即调用layoutSubviews()和setNeedsLayout,尽管这通过实际显示图像(而不是在用户单击单元格之前不显示任何内容)有所帮助,但在用户单击它之前它仍然显示错误的大小。
这是单元格的代码:
import UIKit
class ImageTableViewCell: UITableViewCell {
@IBOutlet weak var pictureView: UIImageView!
var pictureURL: URL? {
didSet {
fetchImage()
}
}
fileprivate func fetchImage() {
if let url = pictureURL {
pictureView.image = nil
let queue = DispatchQueue(label: "image fetcher", qos: .userInitiated)
queue.async { [weak weakSelf = self] in
do {
let contentsOfURL = try Data(contentsOf: url)
DispatchQueue.main.async {
if url == self.pictureURL {
weakSelf?.pictureView?.image = UIImage(data: contentsOfURL)
weakSelf?.layoutSubviews()
print("loaded")
}
}
} catch let exception {
print(exception.localizedDescription)
}
}
}
}
}
这是将单元格加载到其TableViewController上的代码:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = UITableViewCell()
switch indexPath.section {
case 0:
cell = tableView.dequeueReusableCell(withIdentifier: "imageCell", for: indexPath)
if let imageCell = cell as? ImageTableViewCell {
imageCell.pictureURL = tweet?.media[indexPath.row].url
// other stuff not programmed yet
}
return cell
给我单元格高度的代码:
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == 0 && tweet != nil {
let media = tweet?.media[indexPath.row]
return tableView.frame.width / CGFloat(media!.aspectRatio)
}
return UITableViewAutomaticDimension
}
抱歉,我粘贴了所有这些代码,但是我不知道问题出在哪里,因此我将尽一切可能与之相关。
您应该先设置content mode
,然后再设置imageview
的框架,因此,一旦您尝试在cellforrowatindexpath
tableview subclass
awakeFromNib
或cellforrowatindexpath
设置content mode
,然后再cellforrowatindexpath
进行设置!
或者,您可以从界面构建器(从情节提要!)中设置内容模式->选择图像视图->来回属性检查器->选择模式(在视图下)以Aspect fit
好吧,按照关于reddit的回答,我删除了表格视图控制器并重新制作了它,再次设置了所有插座。 它起作用了,我想这是Xcode中的问题吗?
因此,如果您遇到这样的问题,请尝试重新制作情节提要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.