Текстовое поле обрезает первые эмодзи при наборе текста - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть текстовое поле, размер которого соответствует объему текста.Когда вы не печатаете, он выглядит хорошо, но когда вы начинаете печатать, он смещает смайлики влево и вызывает обрезание первых смайликов (это прекрасно работает с текстом).

Я не занимаюсь никаким руководствомизменение размера, просто с помощью sizeToFit ().

код:

override func viewDidLoad() {
    super.viewDidLoad()
    let emojiTextField = UITextField.makeEmojiTextField()
    emojiTextField.delegate = self

    view.addSubview(emojiTextField)
    emojiTextField.anchorCenterSuperview()
}

class EmojiTextField: UITextField {
    override var textInputMode: UITextInputMode? {
        for mode in UITextInputMode.activeInputModes {
            if mode.primaryLanguage == "emoji" {
                return mode
            }
        }
        return nil
    }
}

extension UITextField {
        static func makeEmojiTextField() -> EmojiTextField {
            let tf = EmojiTextField()
            tf.placeholder = ""
            tf.font = UIFont.systemFont(ofSize: 64)
            tf.borderStyle = UITextField.BorderStyle.none
            tf.autocorrectionType = UITextAutocorrectionType.no
            tf.returnKeyType = UIReturnKeyType.done
            tf.contentVerticalAlignment = UIControl.ContentVerticalAlignment.center
            tf.backgroundColor = .green
            return tf
        }
    }

extension UIView {
    public func anchorCenterXToSuperview(constant: CGFloat = 0) {
        translatesAutoresizingMaskIntoConstraints = false
        if let anchor = superview?.centerXAnchor {
            centerXAnchor.constraint(equalTo: anchor, constant: constant).isActive = true
        }
    }

    public func anchorCenterYToSuperview(constant: CGFloat = 0) {
        translatesAutoresizingMaskIntoConstraints = false
        if let anchor = superview?.centerYAnchor {
            centerYAnchor.constraint(equalTo: anchor, constant: constant).isActive = true
        }
    }

    public func anchorCenterSuperview() {
        anchorCenterXToSuperview()
        anchorCenterYToSuperview()
    }
}

Emojis подходит отлично, когда не печатать:

Emojis fit fine when not typing

Первый эмодзи обрезается при наборе: First emoji is cut off when typing

1 Ответ

0 голосов
/ 15 декабря 2018

Вы установили какие-либо ограничения для вашего текстового поля?если нет, попробуйте добавить его в представление стека, и я считаю, что оно должно работать.

...