2013-02-27 3 views
1

키보드가 나타날 때 뷰를 위로 올려야하는 사람들에게 종종 제안되는 것처럼 UIScrollView를 사용합니다. 나는 복사하여이 페이지의 정보 붙여 넣기 - http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html#//apple_ref/doc/uid/TP40009542-CH5-SW7을 - 그렇게 ...키보드가 튀어 나오면 UIScrollView가 잘못된 방향으로 스크롤되는 이유는 무엇입니까?

그러나 무슨 일 나는 텍스트 필드를 누를 때, 키보드가 팝업하지만보기가 실제로 검은 공개, DOWN 스크롤입니다 위에. 그 후 실제로 수동으로 스크롤하여 숨겨진 텍스트 필드를 표시 할 수 있습니다 ... 분명히 그 일은 내가하려고하는 것이 아닙니다!

아이디어가 있으십니까? 나는() 메소드의 viewDidLoad에서 다음과 같은 한 : - :

- (void) keyboardWasShown:(NSNotification *)aNotification 
{ 
    NSDictionary * info = [aNotification userInfo]; 
    CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0, 0,keyboardSize.height, 0); 
    [[self introScroll] setContentInset:contentInsets]; 
    [[self introScroll] setScrollIndicatorInsets:contentInsets]; 

    CGRect ltdRect=[[self view] frame]; 
    ltdRect.size.height=keyboardSize.height; 
    if (!CGRectContainsPoint(ltdRect,[self activeField].frame.origin)) 
    { 
     CGPoint scrollPoint = CGPointMake(0,[self activeField].frame.origin.y-keyboardSize.height); 
     [[self introScroll] setContentOffset:scrollPoint animated:YES]; 
    } 
    NSLog(@"Keyboard out!"); 
} 

뿐만 아니라 keyboardWasShown이 버전 :

(무효)은 내가 keyboardWasShown이 버전을 시도했습니다

{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardWillHideNotification object:nil]; 
} 

을의 viewDidLoad

- (void)keyboardWasShown:(NSNotification*)aNotification { 

    NSDictionary* info = [aNotification userInfo]; 
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
    CGRect bkgndRect = [[[self activeField] superview ]frame]; 
    bkgndRect.size.height += kbSize.height; 

    [[[self activeField] superview] setFrame:bkgndRect]; 

    [[self introScroll] setContentOffset:CGPointMake(0.0, [self activeField].frame.origin.y-kbSize.height) animated:YES]; 

} 

둘 다 나와 똑같은 결과를줍니다.

무슨 일 이니? Xcode 4.6을 사용하고 있습니다.

+0

내 솔루션? AlexWien의 "scrollpoint.y에 44 개 추가"- 제가 344 개를 만들었다는 것을 제외하고는 :) 지금 작동합니다. :) 고마워요, 알렉스 ... 그런데 키보드와 동기화하여 위쪽으로 스크롤 할 수있는 방법은 없으므로 둘 다 동시에 움직일 수 있습니까? – ScatteredFrog

+0

아래에 게시 된 내 솔루션이 ios7에서 더 이상 작동하지 않습니다. 당신도 ios7을 위해 그것을 해결 했습니까? 방법? – AlexWien

답변

0

필자의 텍스트 필드가 스크롤되지 않는 비슷한 문제가있었습니다.
사과 코드 완벽하지, 내가 그것을 수정했다 : 라인에서 활성 필드의 높이를 추가하여 그것을 해결하기 위해 시도 : 문제가 해결되지 않으면

frame.origin.y + frame.size.height - keyboardSize.height 

이 scrollpoint.y에 44을 추가 (네비게이션 바의 크기) iOS7에 대한

업데이트 :

,536로보기 에 이미있는 텍스트 필드에 대한 iOS7에 원하지 않는 잘못된 스크롤을 개선

if (scrollPtY < 0) { 
     return; 
} 
+0

고마워요,하지만 그럴 수는 없습니다. 여전히 아래로 스크롤하는 대신 아래로 스크롤합니다. :( – ScatteredFrog

관련 문제