Я боролся весь день, пытаясь округлить ячейки в табличном представлении следующим образом:
![enter image description here](https://i.stack.imgur.com/0DUUNl.png)
Обратите внимание, что rowHeight должен быть динамическим c увеличивается, когда текстовая метка добавляет одну дополнительную строку. Мои первые подходы почти достигли цели, размеры ячеек велики, а радиус угла точно совпадает, но только когда я начинаю прокручивать вид таблицы вверх и вниз. Когда приложение запускалось, результат был такой:
![enter image description here](https://i.stack.imgur.com/djFXLl.png)
Наконец я добился результата как первое изображение с contentView.layoutSublayers(of: contentView.layer)
в layoutSubviews()
моего пользовательского Я беспокоюсь о том, что это плохая практика или что-то в этом роде, потому что этот метод вызывается много раз. Есть мысли по этому поводу? Можно ли использовать layoutSublayers там или более эффективно по-другому?
Кстати, это код моей пользовательской ячейки:
class TaskCell: UITableViewCell {
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var durationLabel: UILabel!
@IBOutlet weak var priorityImage: UIImageView!
@IBOutlet weak var containerView: UIView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
override func layoutSubviews() {
super.layoutSubviews()
self.layer.backgroundColor = UIColor.clear.cgColor
contentView.layoutSublayers(of: contentView.layer)
setupCellContainerView()
print("? LayoutSubviews Cell")
}
private func setupCellContainerView() {
let height = containerView.bounds.height
let radius = height/2
containerView.layer.cornerRadius = radius
containerView.layer.shadowOffset = CGSize(width: 0, height: 2)
containerView.layer.shadowColor = UIColor.black.cgColor
containerView.layer.shadowOpacity = 0.2
containerView.layer.shadowRadius = 3
containerView.layer.shadowPath = UIBezierPath(roundedRect: containerView.bounds, cornerRadius: radius).cgPath
containerView.layer.shouldRasterize = true
containerView.layer.rasterizationScale = UIScreen.main.scale
containerView.backgroundColor = .aliceBlue
}
}
Спасибо !