滚动UITableView时,UIImageViews变黑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了滚动UITableView时,UIImageViews变黑相关的知识,希望对你有一定的参考价值。

我正在使用我创建的UIImageView的子类,其中我将其tintColor设置为白色:

class UIIconView : UIImageView {
    override init(image: UIImage?) {
        super.init(image: image)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func layoutSubviews() {
        self.image = super.image!.withRenderingMode(.alwaysTemplate)
        self.tintColor = UIColor.white
    }
}

这是正常工作,除非我把UIIconViews放在UITableView的单元格中。当我运行代码并滚动UITableView时,白色UIIconViews全部变为黑色,如下所示:

UIIconViews turning black when running the app

那么,有谁知道为什么会这样?

PS:我用于图标的原始图像是黑色的,但我在UIIconView的layoutSubviews()中着色它们,如果这有帮助的话。

编辑:

好的,我停止使用UIImageView的子类。这是我的整个视图控制器代码,对于此表视图屏幕:

class MessageCell: UITableViewCell{
    @IBOutlet weak var icon: UIImageView!
    @IBOutlet weak var msgTitle: UILabel!
    @IBOutlet weak var msgText: UILabel!
}

class MessagesListViewController: UITableViewController {

    let mockMessages = ["Msg1", "Msg2", "Msg3", "Msg4", "Msg5", "Msg6", "Msg7", "Msg8", "Msg9"]

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return mockMessages.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "messageCell", for: indexPath) as! MessageCell
        cell.msgTitle.text = mockMessages[indexPath.row]
        cell.msgText.text = mockMessages[indexPath.row]
        cell.icon.image = UIImage(named: "ic_email_48pt")
        cell.icon.tintColor = UIColor.white
        cell.backgroundColor = UIColor.clear
        return cell
    }
}
答案

正如@ the4kman和@rmaddy推荐的那样,我不再继承UIImageView来改变它的颜色。相反,我在我的视图控制器的cellForRowAt方法中执行此操作,现在它可以正常工作。

以上是关于滚动UITableView时,UIImageViews变黑的主要内容,如果未能解决你的问题,请参考以下文章

当 scrollViewDidEndDragging 时 UITableView 滚动到特定点

UITableView 滚动 UINavigationBar

滚动 UITableView 时如何创建 NSLayoutConstraint

滚动时 UITableView 中的数据重复

UIScrollView 中的 UIView 中的 UITableView。滚动表格视图时也不要滚动滚动视图

当文本字段开始编辑时停止 UITableView 滚动