Борьба с Automati c Размер ячейки измерения, угловой радиус и CALayer - PullRequest
0 голосов
/ 25 апреля 2020

Я боролся весь день, пытаясь округлить ячейки в табличном представлении следующим образом:

enter image description here

Обратите внимание, что rowHeight должен быть динамическим c увеличивается, когда текстовая метка добавляет одну дополнительную строку. Мои первые подходы почти достигли цели, размеры ячеек велики, а радиус угла точно совпадает, но только когда я начинаю прокручивать вид таблицы вверх и вниз. Когда приложение запускалось, результат был такой:

enter image description here

Наконец я добился результата как первое изображение с 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   
}   

} ​​

Спасибо !

...