it-swarm.com.de

Super langsame Verzögerung/Verzögerung bei der anfänglichen Tastaturanimation von UITextField

Okay, dieses Problem hat mich verrückt gemacht. 

Es dauert ungefähr 3-4 Sekunden, bis die Tastatur nach dem Berühren meiner UITextField angezeigt wird. Dies tritt nur beim ersten Öffnen der Tastatur auf, seit die App gestartet wurde. Danach beginnt die Animation sofort.

Zuerst dachte ich, es sei ein Problem, zu viele Bilder oder meine UITableView zu laden, aber ich habe gerade ein brandneues Projekt mit nur einer UITextField erstellt, und ich habe immer noch dieses Problem. Ich verwende iOS 5, Xcode Ver 4.2 und laufe auf einem iPhone 4S.

Das ist mein Code:

#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

Ist dies ein häufiges Problem für alle Apps?

Im Moment kann ich es nur etwas besser machen, indem ich textField in viewDidAppear als Erstantworten/resign werde, aber das löst das Problem nicht vollständig - es lädt nur die Verzögerung, wenn stattdessen die Ansicht geladen wird. Wenn ich sofort beim Laden der Ansicht auf textField klicke, bekomme ich immer noch das Problem. Wenn ich nach dem Laden der Ansicht 3-4 Sekunden warte, bevor Sie das textField berühren, wird die Verzögerung nicht angezeigt.

168
Vadoff

Das Problem ist also NICHT auf die erste Installation beschränkt, wie ich es mir vorher gedacht hatte, sondern tritt bei jedem Start der App auf. Hier ist meine Lösung, die das Problem vollständig löst. 

- (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];
}
148
Vadoff

Bevor Sie exotische Hacks implementieren, um dieses Problem zu umgehen, versuchen Sie Folgendes: Stoppen Sie die Debug-Sitzung, schließen Sie die App vom Multitasking, trennen Sie das Gerät vom Computer und führen Sie die App normal aus, indem Sie auf das entsprechende Symbol tippen. Ich habe mindestens zwei Fälle gesehen, in denen die Verzögerung nur auftritt, wenn das Gerät angeschlossen ist.

280
Ash

Ja, ich habe auch ein paar Sekunden Verspätung beim neuesten iPhone 4s. Keine Panik Aus bestimmten Gründen geschieht dies nur beim ersten Laden der App aus Xcode in Debug. Wenn ich Release habe, bekomme ich keine Verzögerung. Vergiss es einfach...

27
SmallChess
20
Rok Jarc

Sie können die Lösung von Vadoff in Swift verwenden, indem Sie didFinishLaunchingWithOptions folgendermaßen hinzufügen:

// 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()

Es funktioniert für mich in iOS 8.

17
Greg

Code in Block zur Hauptwarteschlange hinzugefügt und asynchron ausgeführt. (Hauptthread nicht gesperrt)

dispatch_async(dispatch_get_main_queue(), ^(void){
      [textField becomeFirstResponder];
 });
6
Sergey Petruk

Siehe diese Antwort . Sie schlagen vor, UIResponder + KeyboardCache . Es ist einfach und großartig. Getestet auf iOS 7.

4
zekel

Ein verwandtes Problem, bei dem ein UIViewController nur langsam präsentiert werden konnte, wurde durch Verwendung der Systemschriftart anstelle einer benutzerdefinierten Schriftart für UITextField behoben. Vielleicht funktioniert die Systemschrift auch für dieses Problem?

1
Crashalot

Diese ausgewählte Antwort führt zum Absturz von BAD_EXC unter iOS 11 - Von App zu Fix entfernen

0
Manesh

Dieser Fehler scheint in iOS 9.2.1 behoben zu sein. Seit dem Upgrade meines Geräts gibt es keine Verzögerung mehr zwischen dem Tippen auf ein Textfeld und der Tastatur, wenn das Gerät an meinen Computer angeschlossen ist.

0
Jeff Bowen