UITextField Отскок текста при изменении границы - PullRequest
0 голосов
/ 11 июля 2019

Я поместил UITextField внутри UIView и установил textField.autoresizingMask = [.flexibleWidth, .flexibleHeight] (autoLayout не используется). Я также прикрепил UISlider для изменения фрейма UIView. Поскольку я установил autoresizingMask с UIView, размер UITextField также увеличится. Но проблема в том, что текст сильно отскакивает, когда я изменяю границы UIView. Я попытался просмотреть этот SO-ответ и вызвал layoutIfNeeded() для вызова обновления границ, но он не прекращает подпрыгивать.

Вот демоверсия видео

EDIT

Я реализовал textField, не находясь в subView. Даже я не устанавливал autoresizingMask на этот раз. Но все же textField отскакивает. Вот фрагмент кода демонстрации , а также Демонстрационный проект

1 Ответ

0 голосов
/ 12 июля 2019

Попробуйте.

Округляет новую ширину и высоту до ближайшего четного числа.Это гарантирует, что метка / textField может быть центрирована последовательно.

@IBAction func sizeChange(_ sender: UISlider) {
    let scaleFactor = CGFloat(sender.value)
    // CGAffineTransform will rastarize the text and make it blurry
    // selectedView.transform = CGAffineTransform(scaleX: scaleFactor, y: scaleFactor)

    let baseSize = isLabelSelected ? labelBaseSize : textFielBasedSize

    let actualWidth = baseSize!.width * scaleFactor
    let roundedWidth = CGFloat(Int(round(actualWidth / 2.0)) * 2)

    let actualHeight = baseSize!.height * scaleFactor
    let roundedHeight = CGFloat(Int(round(actualHeight / 2.0)) * 2)

    selectedView.bounds = CGRect(x: selectedView.bounds.origin.x,
                                 y: selectedView.bounds.origin.y,
                                 width: roundedWidth,
                                 height: roundedHeight)

    //selectedView.bounds = CGRect(x: selectedView.bounds.origin.x,
    //                           y: selectedView.bounds.origin.y,
    //                           width: baseSize!.width * scaleFactor,
    //                           height: baseSize!.height * scaleFactor)

}
...