#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
.