Swift 3 и XCode 8: ошибка текстового поля в UIBezierPath

#ios #swift #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)
  

Раньше он создавал нечто подобное

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

Но теперь

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

Какие-либо обходные пути?

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

1. Вместо того, чтобы указывать «он выдает неправильные результаты», расскажите нам, что он на самом деле делает и что, по вашему мнению, он должен делать. Возможно, включите снимок экрана.

2. Обновил мой вопрос, @maddy спасибо

Ответ №1:

Вряд ли это ошибка, и, скорее всего, это измененное поведение, с которым ваш код больше не работает.

Это звучит очень похоже на то, как cornerRadius «больше не работает», потому что размер представления теперь составляет 1000×1000 на момент его установки. Это можно исправить, вызвав представление layoutIfNeeded() перед началом стилизации. Итак, сначала я бы попробовал то же решение.

Тем не менее, похоже, что часть вашего пути Безье скрывает белый прямоугольник. Попробуйте установить фон другого цвета для подтверждения. Может быть, вы устанавливаете cornerRadius это представление, и оно больше не работает должным образом?

В качестве альтернативы попробуйте переместить весь код на viewDidAppear сцену. Вероятно, это не постоянное решение, поскольку вы увидите, что все нарисовано, но это может помочь понять, что происходит.

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

1. Я действительно попробовал использовать UIView вместо UITextField, и он работает нормально, давая мне правильные результаты. И я также проверил некоторые коды Github и, похоже, мое предположение верно.