自定义 UITableViewCell 中的 UIImageview 未正确显示

Posted

技术标签:

【中文标题】自定义 UITableViewCell 中的 UIImageview 未正确显示【英文标题】:UIImageview in custom UITableViewCell not correctly displayed 【发布时间】:2016-12-20 14:27:38 【问题描述】:

我有一个自定义 UITableViewCell。

class ProductRow: UITableViewCell 

@IBOutlet weak var iconStack: UIStackView!
@IBOutlet weak var prdImage: UIImageView!
@IBOutlet weak var prdPrice: UILabel!
@IBOutlet weak var prdTitle: UILabel!


override func awakeFromNib()

    super.awakeFromNib()


override func setSelected(_ selected: Bool, animated: Bool) 
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
    

我通过扩展加载 UIImageView

extension UIImageView 
public func imageFromUrl(urlString: String)

    let myUrl = URL(string: "https://" + MobMenu.domain + "/" + MobMenu.shop + "/prd/" + urlString);

    let task = URLSession.shared.dataTask(with: myUrl!)
    
        data, response, error in
        guard let data = data, error == nil else
        
            print("error=\(error)")
            return
        
        DispatchQueue.main.async
        
            self.image = UIImage(data: data)
        

    
    task.resume()


我通过 tableview 函数更新行中的字段

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

    let myCell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! ProductRow

    let prdDTO = prdList[indexPath.row];

    //getURLImage(img : prdDTO.getPrdImg(), myCell : myCell)

    myCell.prdTitle.text = prdDTO.getPrdTitle()
    myCell.prdTitle.font =  UIFont(name: "HelveticaNeue-Thin", size: 12)
    myCell.prdPrice.text = prdDTO.getPrice()

    myCell.prdImage.imageFromUrl(urlString: prdDTO.getPrdImg())
    myCell.prdImage.contentMode = UIViewContentMode.scaleAspectFit
    myCell.prdImage.clipsToBounds = true

问题是这行代码myCell.prdImage.contentMode = UIViewContentMode.scaleAspectFit。如果我删除它,一切都是应该的,但如果我删除它,生成的图像会太大。如果我把它留在那里,但是图像会被推下 tableview

Image of app here

我花了很多时间在谷歌上搜索它,但无法找出问题所在。请帮忙。非常感谢

【问题讨论】:

UIImageView 有什么限制吗? 是的。有 4 个。 width = 0.5 的 superview 宽度尾随空格到 prdTitle、prdPrice 和 iconStack 放置一个具有相同约束的容器 UIView,然后添加具有 (0,0,0,0) 框架的 UIImageView。也许它有效 嗨。谢谢您的帮助!原来是约束。没有为图像设置高度。上帝的约束很糟糕。 【参考方案1】:

首先,我建议您尝试赋予方面以适应自定义单元类的定义。 您还应该将 AutoTranslatingMasks 设置为 false 并自己设置约束。 如果图片的尺寸不是太大,那么你应该选择

image.renderingMode.alwaysOriginal

这样 UITableViewCell 就不会改变它

【讨论】:

以上是关于自定义 UITableViewCell 中的 UIImageview 未正确显示的主要内容,如果未能解决你的问题,请参考以下文章

在 Storyboard 中设计的自定义 UITableViewCell 中的自定义 UIView

ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

将自定义 UITableViewCell 从 nib 加载到 Swift 中的 UIViewController

ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局