У меня есть таблицаView с пользовательскими ячейками. Каждая ячейка имеет свойство «имя» и «изображение». Я пытаюсь добавить границу вокруг изображения. Эта часть работает. Но когда я пытаюсь добавить backgroundColor в CALayer, все, что я вижу в tableView, это CALayer без UIImage.Неожиданное поведение при добавлении CALayer в качестве подуровня в UIImage
Вот код для лучшего понимания и примера с настройкой цвета фона.
@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()
}
}
Здесь также изображения, упомянутые в первом и втором примере:
Я сделал много поиска, но Я не нашел ответа для моя ситуация.
Вот полный код этой ячейки
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)
}
}
Я знаю, как добавить непосредственно в UIImageView, но в моей ситуации я хочу, чтобы граница была в отдельном слое, так как размер рамки рамки должен быть больше, чем размер кадра изображения. Я также попробовал оба метода, которые вы упомянули, и результат все тот же. – Excalibur
Если вы просто хотите добавить более крупную рамку, чем ImageView, вы можете сделать это, используя UIKit, чтобы вставить подвью под изображением, которое больше. Затем установите его цвет фона. Чем больше вы можете обойти свои углы с помощью свойства CALayer, если хотите. Для этого вы можете использовать insertSubview (_: aboveSubview :) или insertSubview (_: belowSubview :) из класса UIView. – Radek
Это может произойти, но когда я хотел бы изменить смещение размера кадра CALayer по сравнению с размером кадра UIImage, мне пришлось бы менять ограничения и т. Д., И это не то, чего я пытаюсь достичь. – Excalibur