Swift 3 和 XCode 8 上似乎存在一个错误,即 UIBezierPath
let myBounds = textField.bounds
let maskPath = UIBezierPath(roundedRect: myBounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let maskLayer = CAShapeLayer()
maskLayer.frame = myBounds
maskLayer.path = maskPath.cgPath
self.textField.layer.mask = maskLayer
let frameLayer = CAShapeLayer()
frameLayer.frame = myBounds
frameLayer.path = maskPath.cgPath
frameLayer.strokeColor = UIColor(hexString: "#59a646").cgColor
frameLayer.fillColor = UIColor.white.cgColor
frameLayer.lineWidth = 1*2;
self.textField.layer.addSublayer(frameLayer)
它曾经产生过类似的东西
但是现在
有什么解决办法吗?
最佳答案
这不太可能是错误,更有可能是您的代码不再适用的行为发生了变化。
这听起来与cornerRadius“不再起作用”非常相似,因为在您设置它时 View 的大小现在为1000x1000。在开始设置样式之前,可以通过调用 View 的 layoutIfNeeded()
来解决此问题。所以首先,我会尝试相同的解决方案。
尽管如此,看起来有一个白色矩形遮挡了贝塞尔曲线路径的一部分。尝试将背景设置为不同的颜色进行确认。是否可能是您在该 View 上设置了 cornerRadius
,但它不再按预期工作?
或者,尝试将所有代码移至 viewDidAppear
阶段。这可能不是一个永久的解决方案,因为您会看到所有内容都被绘制,但它可能有助于理解正在发生的事情。
关于ios - Swift 3 和 XCode 8 : TextField bug in UIBezierPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39824008/