2013-01-03 3 views
2
[self.scrollView scrollRectToVisible:textField.bounds animated:YES]; 

내 UITextField가 흐려지지 않도록 내 UIScrollView를 스크롤 할 수없는 것처럼 보입니다. 나는 scrollRectToVisible이 나의 구원자가 될 것이라고 생각했지만 아무런 갈망이없는 것처럼 보인다. 어쩌면 내 textField 좌표를 내 scrollView로 변환하는 것과 같은 것을 놓친 것 같습니다. 어느 쪽이든 샘플 프로젝트를 확인하십시오.scrollRectToVisible UITextField가 Autolayout으로 스크롤하지 않습니다.

https://github.com/stevemoser/Programming-iOS-Book-Examples/tree/master/ch20p573scrollViewAutoLayout2

아, 그리고이 프로젝트는 대리자 연결을 누락 될 수도 있지만 나는 그것을 확인하고 여전히 스크롤되지 않습니다.

나는 이와 비슷한 다른 질문을 보았지만 Autolayout은 언급하지 않았다.

+0

TPKeyboardAvoidingScrollView이 문제를 해결하지만 난 줄 또는 두 개의 고칠 때 전체 타사 클래스를 사용하지 않습니다. –

+0

답안에 편집본 하나를 추가했습니다. 그럴 가능성이 없는지 확인하십시오. – Bhavin

답변

6

자동 레이아웃으로 변환 한 후 scrollRectToVisible::과 관련된 문제가있었습니다. 방금 setContentOffset::에 대한 직접 전화로 변경했으며 다시 작동하기 시작했습니다.

0

동일한 문제가 있었지만 첫 번째 응답자로 설정하지 않고 자동 레이아웃 된 UITextEdit을보기로 스크롤하려고했습니다.

나에게있어서 UITextField의 경계는 자동 레이아웃 과정에서 나중에 설정되었으므로 레이아웃을 설정 한 직후에 경계를 설정하는 것은 아직 유효하지 않다.

해결 방법 나는 UITextField의 자손을 만들고 setBounds:을 덮어 쓰고 "나중에"보기로 스크롤하는 0 타이머를 추가했습니다. 시스템의 자동 레이아웃 단계가 "나중에"스크롤 될 수 없기 때문에 스크롤 할 수 없습니다 필드 화면 키보드와 추가로 편집해야하는 경우

@interface MyTextField: UITextField 
{ 
    bool _scrollIntoView; 
} 
.. 
@end 
@implementation MyTextField 
-(void)setBounds:(CGRect)bounds 
{ 
    bool empty=CGRectIsEmpty(self.bounds); 
    bool isFirstResponder=self.isFirstResponder; 
    [super setBounds:bounds]; 
    if (empty && !isFirstResponder && _scrollIntoView) 
    [self performSelector:@selector(scrollIntoViewLater) withObject:nil afterDelay:0]; 
    else if (empty && isFirstResponder) 
    [self performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0]; 
} 

-(void)scrollIntoViewLater 
{ 
    CGRect r=[scrollView convertRect:self.bounds fromView:self]; 
    [scrollView scrollRectToVisible:r animated:TRUE]; 
} 
@end 

) 그 시점에서 완료, 단순히 나중에 becomeFirstResponder 전화 : 그것은 차례의 scrollRectToVisible:animated:를 호출하는 개인 scrollTextFieldToVisible API를 사용하여 키보드 위의보기에 자동적으로 스크롤 scrollview. 샘플 링크가 BTW 고장

...

관련 문제