У меня есть этот UITableViewCell
class MyCell: UITableViewCell {
@IBOutlet weak var containerView: UIView!
@IBOutlet weak var firstPartView: UIView!
override func awakeFromNib() {
super.awakeFromNib()
//container view corner radius
self.containerView.layer.cornerRadius = 10.0
self.containerView.layer.masksToBounds = true
self.containerView.layer.isOpaque = false
//shadow
self.containerView.layer.shadowColor = UIColor.black.cgColor
self.containerView.layer.shadowOffset = CGSize(width: 0, height: 1.0)
self.containerView.layer.shadowOpacity = 0.2
self.containerView.layer.shadowRadius = 4.0
//gradient color
self.firstPartView.setGradientBackground(startColor: UIColor(red: 0.224, green: 0.592, blue: 1.0, alpha: 1.0), endColor: UIColor(red: 0.553, green: 0.765, blue: 1.0, alpha: 1.0))
//rounded corners (only topLeft and bottomLeft)
self.firstPartView.roundCorners(corners: [.topLeft, .bottomLeft], radius: 10.0)
}
}
Где функция roundCorners
:
func roundCorners(corners: UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
}
FirstPartView - это простое представление слева от представления контейнера, например:
Но это конечный результат:
Как вы можете видеть, firstPartView имеет неправильную высоту.Читая об этой ошибке, я обнаружил, что в функции awakeFromNib
ректы еще не отрисованы, поэтому я попытался удалить вызов roundCorners
из awakeFromNib
и создал новый класс UIView, подобный этому:
class RoundedCornerFix: UIView {
override func layoutSubviews() {
super.layoutSubviews()
self.roundCorners(corners: [.topLeft, .bottomLeft], radius: 10.0)
}
}
К сожалению, без удачи.Это результат:
Я также сделал это изменение:
override func awakeFromNib() {
super.awakeFromNib()
[...]
//rounded corners (only topLeft and bottomLeft)
self.firstPartView.layoutIfNeeded()
self.firstPartView.roundCorners(corners: [.topLeft, .bottomLeft], radius: 10.0)
}
Но проблема та же