Супер медленная задержка / задержка при начальной анимации клавиатуры UITextField - PullRequest
168 голосов
/ 20 февраля 2012

Хорошо, эта проблема сводит меня с ума.

Требуется примерно 3-4 секунды, чтобы клавиатура всплыла после того, как я коснулся UITextField.Это происходит только в первый раз, когда клавиатура всплывает с момента запуска приложения, после чего анимация запускается мгновенно.

Сначала я подумал, что это проблема загрузки слишком большого количества изображений или моего UITableView, но ясоздал новый проект с UITextField, и я до сих пор испытываю эту проблему.Я использую iOS 5, Xcode ver 4.2 и работаю на iPhone 4S.

Это мой код:

#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 20, 280, 30)];
    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.delegate = self;
    [self.view addSubview:textField];
}

@end

Это общая проблема для всех приложений?

Прямо сейчас, единственный способ сделать его несколько лучше - это textField стать / подать в отставку первым респондентом в viewDidAppear, но это не решает проблему полностью - она ​​просто загружает задержку, когда представлениезагружает вместо.Если я сразу нажимаю textField при загрузке представления, я все равно получаю проблему;если я подожду 3-4 секунды после загрузки представления, прежде чем дотронуться до textField, я не получу задержку.

Ответы [ 11 ]

283 голосов
/ 15 декабря 2014

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

148 голосов
/ 07 декабря 2013

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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // Preloads keyboard so there's no lag on initial keyboard appearance.
  UITextField *lagFreeField = [[UITextField alloc] init];
  [self.window addSubview:lagFreeField];
  [lagFreeField becomeFirstResponder];
  [lagFreeField resignFirstResponder];
  [lagFreeField removeFromSuperview];
}
27 голосов
/ 24 марта 2012

Да, я также получил несколько секунд задержки на последнем iPhone 4s. Не паникуйте. По некоторым причинам это происходит только при первой загрузке приложения из Xcode в Debug. Когда я сделал релиз, я не получил задержку. Просто забудь об этом ...

20 голосов
/ 20 февраля 2012
17 голосов
/ 07 января 2015

Вы можете использовать решение Vadoff в Swift, добавив его в didFinishLaunchingWithOptions:

// Preloads keyboard so there's no lag on initial keyboard appearance.
let lagFreeField: UITextField = UITextField()
self.window?.addSubview(lagFreeField)
lagFreeField.becomeFirstResponder()
lagFreeField.resignFirstResponder()
lagFreeField.removeFromSuperview()

Это работает для меня в iOS 8.

6 голосов
/ 22 августа 2014

Код в блоке добавлен в основную очередь и выполняется асинхронно.(не заблокирован основной поток)

dispatch_async(dispatch_get_main_queue(), ^(void){
      [textField becomeFirstResponder];
 });
4 голосов
/ 16 января 2014

См. этот ответ . Они предлагают UIResponder + KeyboardCache . Это просто и круто. Протестировано на iOS 7.

1 голос
/ 11 мая 2016

Связанная проблема, когда UIViewController будет отображаться медленно, была решена путем использования системного шрифта вместо пользовательского шрифта в UITextField. Возможно, использование системного шрифта также подойдет для этой проблемы?

0 голосов
/ 06 июня 2017

Этот выбранный ответ вызывает сбой BAD_EXC на iOS 11 - удалить из приложения, чтобы исправить

0 голосов
/ 29 февраля 2016

Эта ошибка исправлена ​​в iOS 9.2.1. После обновления моего устройства у меня больше не возникает задержка между нажатием текстового поля и отображением клавиатуры, когда мое устройство подключено к компьютеру.

...