Super slow lag / delay przy początkowej animacji klawiatury UITextField
Dobra, ten problem doprowadza mnie do szału.
Po dotknięciu mojego UITextField
klawiatura wyskakuje około 3-4 sekund. Dzieje się tak tylko przy pierwszym uruchomieniu klawiatury od momentu uruchomienia aplikacji, a następnie natychmiast rozpoczyna się animacja.
Na początku myślałem, że to problem z załadowaniem zbyt wielu obrazów, lub mojego UITableView
, ale właśnie stworzyłem nowy projekt z tylko UITextField
, i nadal doświadczam tego problemu. Używam iOS 5, Xcode ver 4.2 i działa na iPhone 4S.
To jest mój kod:
#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
Czy jest to powszechny problem dla wszystkich aplikacji?
W tej chwili jedynym sposobem, w jaki mogę to poprawić, jest posiadanie textField
become / resign first responder in viewDidAppear
, ale to nie rozwiązuje problemu całkowicie - po prostu ładuje opóźnienie, gdy Widok się ładuje. Jeśli kliknę na textField
natychmiast po załadowaniu widoku, nadal mam problem; jeśli poczekam 3-4 sekundy po załadowaniu widoku przed dotknięciem pola tekstowego, nie dostanę opóźnienie.
11 answers
Zanim zaimplementujesz jakieś egzotyczne hacki, aby obejść ten problem, spróbuj tego: zatrzymaj sesję debugowania, zamknij aplikację z wielozadaniowości, odłącz urządzenie od komputera i uruchom aplikację normalnie, dotykając jej ikony. Widziałem co najmniej dwa przypadki, w których opóźnienie występuje tylko podczas podłączania urządzenia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-15 15:49:38
Więc problem nie ogranicza się tylko do pierwszej instalacji, jak wcześniej myślałem, ale dzieje się za każdym razem, gdy aplikacja jest uruchamiana. Oto moje rozwiązanie, które całkowicie rozwiązuje problem.
- (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];
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-09 19:52:22
Tak, mam też kilkusekundowe opóźnienie na najnowszym iPhonie 4s. nie panikuj. Z pewnych powodów zdarza się to tylko po raz pierwszy aplikacja jest ładowana z Xcode w debugowaniu. Kiedy zwolniłem, nie mam opóźnienia. Zapomnij o tym...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-24 08:00:25
Jest to znany problem.
Wstępne Ładowanie klawiatury wydaje się obiecujące. Sprawdź Wstępne ładowanie tablicy UIKeyboard.
Dodatkowy materiał do czytania:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:32
Możesz użyć rozwiązania Vadoffa w języku Swift, dodając to do 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()
To działa dla mnie w iOS 8.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-16 17:05:30
Kod w bloku dodany do kolejki main I uruchamiany asynchronicznie. (nie blokuj głównego wątku)
dispatch_async(dispatch_get_main_queue(), ^(void){
[textField becomeFirstResponder];
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-29 06:39:10
Zobacz tę odpowiedź . Sugerują UIResponder+KeyboardCache . To proste i niesamowite. Testowane na iOS 7.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:16
Powiązany problem, w którym Kontroler UIViewController byłby powolny, został rozwiązany za pomocą czcionki systemowej zamiast niestandardowej w polu UITextField. Być może użycie czcionki systemowej również zadziała na ten problem?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-10 22:36:11
Ten błąd wydaje się być naprawiony w iOS 9.2.1. Od aktualizacji urządzenia nie ma już opóźnienia między dotknięciem pola tekstowego a pojawieniem się klawiatury, gdy urządzenie jest podłączone do komputera.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-29 18:55:36
W tym celu należy skontaktować się z firmą BAD_EXC, aby dowiedzieć się więcej o firmie BAD_EXC.]}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-06 13:04:38
Możesz dodać poniższy kod, gdy Widok viewcontrollera został załadowany, jak viewDidAppear.Nie tylko aplikacja:didFinishLaunchingWithOptions:
UITextField *lagFreeField = [[UITextField alloc] init];
[self.window addSubview:lagFreeField];
[lagFreeField becomeFirstResponder];
[lagFreeField resignFirstResponder];
[lagFreeField removeFromSuperview];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-15 03:55:45