Нечетное поведение ведущих пробелов для UITextField с кернингом - PullRequest
1 голос
/ 18 октября 2019

У меня есть UITextField с использованием системного шрифта с применением кернинга.

Проблема

  1. При добавлении начальных пробельных символов в пустое полеширина каждого символа пробела значительно меньше, чем должна быть.
  2. При добавлении непробельного символа после всех начальных пробелов ширина каждого символа пробела возвращается к ожидаемому размеру.
  3. При удалении всех символов, добавленных после начальных пробельных символов, текстовое поле возвращается в состояние проблемы из # 1.

Результатом всего этого является то, чтоПо всей видимости, курсор поля неравномерно перемещается между состоянием № 2 и другими состояниями.

Код

Добавление текстового поля через раскадровку приведет к зависанию приложения при запуске вТренажер. Нажатие кнопки «Отладить иерархию представлений» во время работы приложения может привести к ошибке «Невозможно записать иерархию представлений».

class ViewController: UIViewController {
    @IBOutlet weak var textField: UITextField! {
        didSet {
            textField.defaultTextAttributes = [.kern: 1]
        }
    }
}

Поэтому добавьте текстовое поле в код, чтобы получить поведение, показанное ниже:

class ViewController: UIViewController {
    let textField: UITextField = {
        let textField = UITextField()
        textField.defaultTextAttributes = [.kern: 1]
        return textField
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(textField)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        textField.frame.size = CGSize(width: 280, height: 44)
        textField.center = view.center
    }
}

Видео

enter image description here

...