【发布时间】:2017-01-24 10:32:17
【问题描述】:
我有带有自定义单元格的 tableView。每个单元格都有属性“名称”和“图像”。我想要做的是在图像周围添加边框。这部分有效。但是当我尝试将 backgroundColor 添加到 CALayer 时,我在 tableView 中看到的只是没有 UIImage 的 CALayer。
这里是用于更好理解的代码和设置背景颜色的示例。
@IBOutlet weak var channelImage: UIImageView! {
didSet {
let borderLayer = CALayer()
let borderFrame = CGRect(x: -4, y: -4, width: channelImage.frame.size.width+8, height: channelImage.frame.size.width+8)
borderLayer.frame = borderFrame
borderLayer.cornerRadius = 4
borderLayer.borderWidth = 0.5
borderLayer.borderColor = UIColor.lightGray.cgColor
channelImage.layer.insertSublayer(borderLayer, at: 0)
channelImage.layer.masksToBounds = false
borderLayer.backgroundColor = UIColor.lightGray.cgColor
self.channelImage.layoutIfNeeded()
self.channelImage.layoutSubviews()
}
}
没有背景颜色:
@IBOutlet weak var channelImage: UIImageView! {
didSet {
let borderLayer = CALayer()
let borderFrame = CGRect(x: -4, y: -4, width: channelImage.frame.size.width+8, height: channelImage.frame.size.width+8)
borderLayer.frame = borderFrame
borderLayer.cornerRadius = 4
borderLayer.borderWidth = 0.5
borderLayer.borderColor = UIColor.lightGray.cgColor
channelImage.layer.insertSublayer(borderLayer, at: 0)
channelImage.layer.masksToBounds = false
self.channelImage.layoutIfNeeded()
self.channelImage.layoutSubviews()
}
}
这里还引用了第一个和第二个示例的图像:
我做了很多搜索,但没有找到适合我情况的答案。
这里是这个 Cell 的完整代码
class ChannelCell: UITableViewCell, ChannelSettable {
static let reusableID = "channelCell"
var channel: Channel? = nil {
didSet {
self.channelName.text = channel?.channelName ?? ""
self.channelImage.image = UIImage(named: channel?.channel ?? "") ?? UIImage(named: "TV")
self.channelCategory.text = channel?.chCategory ?? ""
}
}
@IBOutlet weak var channelName: UILabel!
@IBOutlet weak var channelCategory: UILabel!
@IBOutlet weak var channelImage: UIImageView! {
didSet {
let borderLayer = CALayer()
let borderFrame = CGRect(x: -4, y: -4, width: channelImage.frame.size.width+8, height: channelImage.frame.size.width+8)
borderLayer.frame = borderFrame
borderLayer.cornerRadius = 4
borderLayer.borderWidth = 0.5
borderLayer.borderColor = UIColor.lightGray.cgColor
borderLayer.backgroundColor = UIColor.lightGray.cgColor
channelImage.layer.insertSublayer(borderLayer, at: 0)
channelImage.layer.masksToBounds = false
}
}
override func awakeFromNib() {
super.awakeFromNib()
self.channelName.font = DesignHelper.channelNameFont
self.channelCategory.font = DesignHelper.channelCategoryFont
self.layoutIfNeeded()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
【问题讨论】: