ios - Swift 3 和 XCode 8 : TextField bug in UIBezierPath

标签 ios swift uibezierpath

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)

它曾经产生过类似的东西

enter image description here

但是现在

enter image description here

有什么解决办法吗?

最佳答案

这不太可能是错误,更有可能是您的代码不再适用的行为发生了变化。

这听起来与cornerRadius“不再起作用”非常相似,因为在您设置它时 View 的大小现在为1000x1000。在开始设置样式之前,可以通过调用 View 的 layoutIfNeeded() 来解决此问题。所以首先,我会尝试相同的解决方案。

尽管如此,看起来有一个白色矩形遮挡了贝塞尔曲线路径的一部分。尝试将背景设置为不同的颜色进行确认。是否可能是您在该 View 上设置了 cornerRadius,但它不再按预期工作?

或者,尝试将所有代码移至 viewDidAppear 阶段。这可能不是一个永久的解决方案,因为您会看到所有内容都被绘制,但它可能有助于理解正在发生的事情。

关于ios - Swift 3 和 XCode 8 : TextField bug in UIBezierPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39824008/

相关文章:

ios - 有了 MainViewController,如何在 MainVC 中与实际的 UIContainerViews 通信?

ios - UIActivityViewController whatsapp 共享对话框白色文本背景

swift - 如何用静态方法重新实例化一个类?

ios - 重绘时未清除 UIBezierPath

ios - 将平板电脑布局添加到iOS手机布局

objective-c - 使用UIImage作为@“picture”共享Facebook对话框

ios - 在设备控制台中查看 os_log 消息

swift - 滑动到其他月份时 FSCalendar 自定义问题

ios - Objective C UIBezierPath 路径关闭问题

ios - 创建一个带有圆形顶部边缘的 UIView