Ограничения не отображаются должным образом при применении закругленных углов к UIView (только в версиях iPhone XS Max & +) - PullRequest
0 голосов
/ 29 марта 2019

Я округляю UIView с помощью этой функции:

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
    }

override func viewDidLoad() {
        super.viewDidLoad()

        someUIView.roundCorners([.topLeft,.topRight], radius: 20)            
    }

Это работает, как и ожидалось, но при тестировании на моделях iPhone XS Max и All Plus ограничения путаются, но только на левой сторонеscreen.

Я не могу понять, почему, я думаю, это как-то связано с тем, как функция закругленных углов применяет слой к виду, потому что когда я удаляю раскладку закругленных углов, это хорошо даже на тех моделях iPhone, илиможет быть, это должно делать с полями?Иди, но я был бы очень признателен, если бы кто-нибудь смог мне помочь с этим.

Изображение, чтобы вы могли оценить проблему (XS, XSMax, 7, 7 +)

1 Ответ

1 голос
/ 29 марта 2019

Вы устанавливаете UIBezierPath, используя self.bounds до . Вид выложен.

Добавьте это к своему UIView классу:

override func layoutSubviews() {
     super.layoutSubviews()
     self.roundCorners([.topLeft,.topRight], radius: 20)
}

и удалите вызов из функции viewDidLoad() вашего контроллера представления.

...