Ios 滚动UITableView时,UIImageView变黑
我正在使用我创建的UIImageView的子类,其中我将其tintColor设置为白色:Ios 滚动UITableView时,UIImageView变黑,ios,swift,uitableview,uiimageview,Ios,Swift,Uitableview,Uiimageview,我正在使用我创建的UIImageView的子类,其中我将其tintColor设置为白色: class UIIconView : UIImageView { override init(image: UIImage?) { super.init(image: image) } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } ov
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
}
}
这工作正常,除非我将UIIConView放在UITableView的单元格中。当我运行代码并在UITableView中滚动时,白色的UIIConView将全部变为黑色,如下所示:
那么,有人知道为什么会这样吗
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进行子类化以更改其颜色。相反,我在我的视图控制器的cellForRow方法中这样做,现在它工作了。显示您的
cellForRow
方法我不建议为此对UIImageView
进行子类化。将代码从表视图的委托的layoutSubviews()
移出到cellForRowAt
方法。layoutSubviews
只应用于更新视图的子视图框架。它不应该用于任何其他用途。当前在layoutSubviews
中的代码应该在init
方法中只调用一次。当您覆盖它时,请始终调用super.layoutSubviews
。@4kman好的,用更多信息编辑了我的问题。@rmaddy谢谢您提供的信息。我不再将UIImageView子类化以更改其颜色。