У меня есть расширение для изгиба нижнего края видов, поскольку этот стиль используется на нескольких экранах в приложении, которое я пытаюсь создать.
Однако я заметил, что могу заставить его работать только с представлениями, которые я добавил через конструктор интерфейса. Если я пытаюсь применить его к представлению, созданному программно, они не отображаются.
Я создал простой пример для иллюстрации проблемы. Основная раскадровка содержит два viewController с одним цветным представлением посередине: один создан с помощью Interface Builder, а другой - программно.
В StoryboardVC вид с кривой отображается правильно без каких-либо проблем. Метод setBottomCurve () используется для создания кривой.
Если вы сравните это с установкой точки входа в ProgrammaticVC, при запуске приложения вы увидите простой белый экран. Прокомментируйте эту строку, чтобы вид снова появился.
Это расширение используется:
extension UIView {
func setBottomCurve(curve: CGFloat = 40.0){
self.frame = self.bounds
let rect = self.bounds
let y:CGFloat = rect.size.height - curve
let curveTo:CGFloat = rect.size.height
let myBezier = UIBezierPath()
myBezier.move(to: CGPoint(x: 0, y: y))
myBezier.addQuadCurve(to: CGPoint(x: rect.width, y: y), controlPoint: CGPoint(x: rect.width / 2, y: curveTo))
myBezier.addLine(to: CGPoint(x: rect.width, y: 0))
myBezier.addLine(to: CGPoint(x: 0, y: 0))
myBezier.close()
let maskForPath = CAShapeLayer()
maskForPath.path = myBezier.cgPath
layer.mask = maskForPath
}
}
Я ожидаю, что ProgrammaticVC будет выглядеть идентично StoryboardVC (за исключением разницы в цвете)
Пример проекта можно найти здесь:
https://github.com/belamatedotdotipa/CurveTest2