Округление верхних углов пользовательского интерфейса iOS работает только для верхнего левого

#ios #swift #uiview

#iOS #swift #uiview

Вопрос:

Я хочу округлить верхние углы пользовательского интерфейса. Эмулятор iOS версии 12.0

Мое расширение

     extension UIView
{
    func round(corners: UIRectCorner, radius: CGFloat) {
        let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        self.layer.mask = mask
    }
}
  

Как я это использую

 test.round(corners: [.topRight, .topLeft], radius: 20)
  

Результат

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

Комментарии:

1. вы уверены, что другие виды не перекрываются? попробуйте захватить пользовательский интерфейс во время выполнения

2. Вы добавили какие-либо ограничения на это view ? И где вы это назвали? Потому что ваш код работает для меня. В вашем расширении нет проблемы.

3. также проверьте, вызываете ли вы это в основном потоке

4. В iOS 11 появилась новая структура под названием CACornerMask. view.clipsToBounds = true view. layer.cornerRadius = 10 view. layer.maskedCorners = [.layerMinXMinYCorner,.layerMaxXMinYCorner]

5. Скорее всего, вы вызываете это из viewDidLoad , и окончательный кадр вашего представления еще не установлен. Вызовите это из viewDidLayoutSubviews .