Закругленный угол в UIView не работает только в нескольких симуляторах, таких как iPhone8, iPhone6s, iPhone6s plus, iPhone 6 - PullRequest
1 голос
/ 10 июля 2020

У меня есть требование, чтобы угол в верхнем левом и правом углу был закруглен. Ниже приведен код того же.

let size = CGSize(width: 30, height: 30)
        let bezierPath = UIBezierPath(roundedRect: self.alertView.bounds, byRoundingCorners: [.topRight, .topLeft], cornerRadii: size)
        let shapeLayer = CAShapeLayer()
        shapeLayer.frame = self.alertView.bounds
        shapeLayer.path = bezierPath.cgPath
        self.alertView.layer.mask = shapeLayer

Это нормально работает во всех симуляторах iPhone 8 плюс и выше. Но для остальных симуляторов, таких как iPhone 6, iPhone 6 плюс и др. c, код не работает должным образом. Я даже пробовал использовать несколько типов представлений, но они не работают в соответствии с требованиями. Я получаю только скругленный угол с левой стороны, но не с правой. Ниже представлены скриншоты UIView с разных симуляторов

iPhone 11 (работает нормально)

enter image description here

iPhone 8 (not working as per requirement)

введите описание изображения здесь

Проблема не возникает. Пожалуйста, помогите!

Ответы [ 4 ]

3 голосов
/ 10 июля 2020

Почему бы вам просто не использовать для этого maskedCorners и cornerRadius?

self.alertView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
self.alertView.layer.cornerRadius = 10.0

Снимок экрана:

введите описание изображения здесь

0 голосов
/ 10 июля 2020

Я тестировал это на каждом устройстве. пожалуйста, попробуйте это:

  let viewSub = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 200, height: 200))

viewSub.backgroundColor = .red
viewSub.center =  self.view.center
self.view.addSubview(viewSub)

let rectShape = CAShapeLayer()
rectShape.bounds = viewSub.frame
rectShape.position = viewSub.center
rectShape.path = UIBezierPath(roundedRect: viewSub.bounds, byRoundingCorners: [ .topRight , .topLeft], cornerRadii: CGSize(width: 20, height: 20)).cgPath

viewSub.layer.backgroundColor = UIColor.red.cgColor
//Here I'm masking the textView's layer with rectShape layer
viewSub.layer.mask = rectShape
0 голосов
/ 10 июля 2020

Попробуйте

let size = CGSize(width: view.frame.size.width * 0.80, height: 30)

или

let size = CGSize(width: UIScreen.main.bounds.width * 0.065, height: 30)

Числа могут меняться. Это означает, что ширина составляет до 80 процентов экрана телефона.

0 голосов
/ 10 июля 2020

Добавить радиус угла в viewDidLayoutSubviews() вместо viewDidLoad()

 override func viewDidLayoutSubviews() {
     self.alertView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
     self.alertView.layer.cornerRadius = 10.0
}
...