Угловой радиус для супервизора подвида UIView не показан

Добавлено UIView из (50 высоты) для супервизора, т. е. UIView 50 % удержания внутри, остающегося снаружи для супервизора.

После добавления углового радиуса в супервизор нижняя половина нижнего вида не отображается.

extension 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 awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
    bg_view.roundCorners([.bottomLeft, .bottomRight], radius: 20). // MainView
    SearchView.bringSubviewToFront(bg_View)
}

Вот изображение раскадровки

д


person kiran    schedule 04.06.2020    source источник
comment
Можете ли вы добавить раскадровку того, как они выглядят с разными цветами, чтобы избежать возможной путаницы?   -  person Rikh    schedule 04.06.2020
comment
@Rikh тоже добавил раскадровку   -  person kiran    schedule 04.06.2020
comment
Ответ ниже — самое простое решение вашей проблемы. CAShapeLayer добавляется к bg_view и вызывает отсечение всего содержимого, присутствующего внутри bg_view, но за пределами примененного CGPath, который является границами bg_view.   -  person Rikh    schedule 04.06.2020


Ответы (1)


Вы должны переместить зеленый вид из фонового вида, который обрезает его границы, так как вы устанавливаете angleRadius. Ваш зеленый вид может иметь ограничение centerY, равное вашему нижнему уровню backgroundViews. Чтобы добиться этого, вы можете сначала определить вертикальное расстояние между ними, а затем отредактировать это ограничение для первого элемента по центру.

Просмотреть иерархию

person Feridun Erbaş    schedule 04.06.2020