Добавить тень и только радиус левого / правого угла в swift с autoLayout - PullRequest
0 голосов
/ 03 октября 2018

У меня есть этот 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 - это простое представление слева от представления контейнера, например:

AutoLayout

Но это конечный результат:

enter image description here

Как вы можете видеть, firstPartView имеет неправильную высоту.Читая об этой ошибке, я обнаружил, что в функции awakeFromNib ректы еще не отрисованы, поэтому я попытался удалить вызов roundCorners из awakeFromNib и создал новый класс UIView, подобный этому:

class RoundedCornerFix: UIView {
    override func layoutSubviews() {
        super.layoutSubviews()
        self.roundCorners(corners: [.topLeft, .bottomLeft], radius: 10.0)
    }     
 }

К сожалению, без удачи.Это результат:

enter image description here

Я также сделал это изменение:

override func awakeFromNib() {
    super.awakeFromNib()

    [...]

    //rounded corners (only topLeft and bottomLeft)
    self.firstPartView.layoutIfNeeded()
    self.firstPartView.roundCorners(corners: [.topLeft, .bottomLeft], radius: 10.0)    
}

Но проблема та же

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...