私はカスタムセルを持つtableViewを持っています。各セルは、プロパティ "name"と "image"を持っています。私がしようとしているのは、画像の周りに境界線を追加することです。この部分は動作します。しかし、私がCALayerにbackgroundColorを追加しようとすると、私がtableViewで見ることができるのはUALmageなしのCALayerです。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()
}
}
はまた、第1および第2の例に参照されるイメージです。
私は検索の多くをしましたが、私は答えが見つからなかった私の状況。あなたは、余分な層にを気にする必要はありません
channelImage.layer.borderWidth = 0.5
channelImage.layer.borderColor = UIColor.lightGray.cgColor
:ここ
は、あなたがそのようにUIImageViewの層に直接国境を追加することができ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)
}
}
私は追加する方法を知っています私の状況では、ボーダーフレームのサイズはイメージのフレームサイズよりも大きくなければならないので、私はボーダーを別のレイヤーにしたいと思っています。私もあなたが言及した2つの方法を試してみましたが、結果は同じです。 – Excalibur
ImageViewより大きなボーダーを追加したい場合は、UIKitを使用して、より大きなimageViewの下にサブビューを挿入することができます。次に、背景色を設定します。あなたが好きなら、あなたはCALayerプロパティでコーナーを丸めることができます。あなたはそれを行うためにUIViewクラスからinsertSubview(_:aboveSubview :)またはinsertSubview(_:belowSubview :)を使用することができます。 – Radek
これは可能ですが、UALmageフレームサイズと比較してCALayerフレームサイズのオフセットを変更したい場合は、制約などを変更する必要があります。これは達成しようとしているものではありません。 – Excalibur