UITextField의 초기 키보드 애니메이션에서 슈퍼 느린 지연 / 지연
알았어,이 문제는 날 미치게 만들었 어
내를 터치 한 후 키보드가 나타나는 데 약 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
뷰가로드 될 때 즉시 클릭하면 여전히 문제가 발생합니다. textField를 터치하기 전에보기가로드 된 후 3-4 초를 기다리면 지연이 발생하지 않습니다.
이 문제를 해결하기 위해 이국적인 해킹을 구현하기 전에 다음을 시도하십시오. 디버그 세션을 중지하고, 멀티 태스킹에서 앱을 닫고, 컴퓨터에서 장치의 플러그를 뽑은 다음 아이콘을 눌러 정상적으로 앱을 실행하십시오. 장치가 연결되어있는 동안에 만 지연이 발생하는 두 가지 경우를 보았습니다.
따라서 문제는 이전에 생각했던 첫 번째 설치에만 국한된 것이 아니라 앱을 시작할 때마다 발생합니다. 이 문제를 완전히 해결하는 솔루션이 있습니다.
- (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];
}
네, 최신 아이폰 4s도 몇 초 지연되었습니다. 당황하지 마십시오. 어떤 이유로, 앱이 Xcode에서 처음으로 디버그로로드 될 때만 발생합니다. 릴리스했을 때 지연이 발생하지 않습니다. 그냥 잊어 버리세요 ...
이것은 알려진 문제입니다.
사전로드 키보드가 유망한 것 같습니다. UIKeyboard 사전로드를 확인하십시오 .
추가 독서 자료 :
UITextField의 초기 iPhone 가상 키보드 표시 속도가 느립니다. 이 해킹이 필요합니까?
로드하는 동안 UITextField 키보드 블록 실행 루프?
didFinishLaunchingWithOptions에 다음을 추가하여 Swift에서 Vadoff의 솔루션을 사용할 수 있습니다.
// 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에서 나를 위해 일하고 있습니다.
기본 대기열에 추가 된 블록의 코드가 비동기 적으로 실행됩니다. (주실을 잠그지 마십시오)
dispatch_async(dispatch_get_main_queue(), ^(void){
[textField becomeFirstResponder];
});
이 답변을 참조하십시오 . UIResponder + KeyboardCache 제안 합니다. 간단하고 굉장합니다. iOS 7에서 테스트되었습니다.
UIViewController가 느리게 나타나는 관련 문제는 UITextField에서 사용자 정의 글꼴 대신 시스템 글꼴을 사용하여 해결되었습니다. 아마도 시스템 글꼴을 사용하여이 문제를 해결할 수도 있습니까?
이 버그는 iOS 9.2.1에서 수정 된 것으로 보입니다. 장치를 업그레이드 한 후 더 이상 텍스트 필드를 누르는 것과 장치가 컴퓨터에 연결되어있을 때 나타나는 키보드 사이의 지연이 없습니다.
이 선택 답변은 iOS 11에서 BAD_EXC 충돌을 일으킴-앱에서 제거하여 수정
You can add below code when viewController's view did loaded, like viewDidAppear.Not just application:didFinishLaunchingWithOptions:
UITextField *lagFreeField = [[UITextField alloc] init];
[self.window addSubview:lagFreeField];
[lagFreeField becomeFirstResponder];
[lagFreeField resignFirstResponder];
[lagFreeField removeFromSuperview];
'development' 카테고리의 다른 글
XML 파일을 통해 TextView 굵게 표시 하시겠습니까? (0) | 2020.05.26 |
---|---|
Unix 쉘 스크립트에서 읽을 수있는 JSON 형식으로 curl 출력 표시 (0) | 2020.05.26 |
Angular.js 지시문 동적 templateURL (0) | 2020.05.26 |
LINQ를 사용하여 목록에서 중복 항목을 얻는 방법은 무엇입니까? (0) | 2020.05.26 |
JavaScript : 클라이언트 측과 서버 측 유효성 검사 (0) | 2020.05.26 |