Хобрук: Ваш путь к мастерству в программировании

UITextField, при отставке первого респондента, вызывающий странную анимацию прокрутки текста

У меня есть несколько UITextFields, реализованных в UITableView для формы входа. При отмене первого ответчика в обоих случаях в первый раз происходит действительно странный скачок анимации. Поскольку они почти полностью созданы в Interface Builder с файлом .xib, у меня практически нет кода для добавления. Но вот забавный .gif, показывающий поведение:

Обновление:

Я сузил его до того факта, что я прослушиваю события клавиатуры, чтобы настроить ограничения просмотра. Это код, который вызывает проблему:

func keyboardWillHide(notification: NSNotification) {
    // tried self.formContainer.layoutIfNeeded() here too to force pending layouts
    formContainerYConstraint.constant = 40
    UIView.animateWithDuration(0.4) { () -> Void in
        self.formContainer.layoutIfNeeded()
    }
}

... где контейнер формы - это представление, в котором находится табличное представление и кнопка входа.


  • как вы переключаете управление с первого текстового поля на второе 31.01.2016
  • Симулятор, поэтому вкладка (далее) и нажатие также делают это. 31.01.2016
  • глупо, но только для подтверждения? Это textView или TextField?? 31.01.2016
  • Вы перезагружаете ячейку или таблицу? Покажите, какой код у вас есть. 31.01.2016
  • Rohit - yes textfield, Wain Я скоро добавлю код делегата табличного представления. 31.01.2016
  • Сузил основную причину и опубликовал код для этого. 31.01.2016
  • У меня точно такая же проблема. В частности, это происходит при отказе от первого ответчика в том же цикле макета, что и вызов layoutIfNeeded в блоке animateWithDuration. 03.02.2016
  • Может быть связано с проблемой с sizeThatFits: и UITextView в iOS 8. stackoverflow.com/questions/30519940 07.03.2017

Ответы:


1

Похоже на полный взлом (и я бы хотел, чтобы кто-нибудь опубликовал лучший ответ), но в то же время я решил это, добавив небольшую задержку к действию анимации — я подозреваю, что это связано с превращением — и События resignFirstResponder, возникающие при переключении между двумя полями ввода.

let delay: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC)))
dispatch_after(delay, dispatch_get_main_queue()) { () -> Void in
    self.formContainerYConstraint.constant = 40
    UIView.animateWithDuration(0.4) { () -> Void in
        self.formContainer.layoutIfNeeded()
    }
}
31.01.2016
  • Собирался опубликовать тот же самый вопрос с точно таким же хакерским решением. Я тоже не нашел ничего лучше. 03.02.2016
  • Интересно, что до того, как я применил приведенный выше код, продолжительность анимации не учитывалась и, казалось, автоматически синхронизировалась с анимацией клавиатуры. После добавления dispatch_after мне пришлось настроить продолжительность анимации, чтобы попытаться соответствовать тому, что делала клавиатура. 04.07.2016
  • Да, это уродливый хак, конечно 04.07.2016

  • 2

    Попробуй это

    - (void)textFieldDidEndEditing:(UITextField *)textField
    {
      [textField layoutIfNeeded];
    }
    
    05.05.2017
  • как предлагается здесь: stackoverflow. ком/вопросы/33544054/ 05.05.2017
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..