2012-10-07 4 views
9

UIScrollView 안에 양식을 구현 중입니다. 사용자가 모든 필드를 볼 수 있도록 키보드를 열 때 스크롤보기의 내용 맨 아래에 공간을 추가하려고합니다. 나는 다음과 같은 코드로 모든 필요한 제약 조건을 부가 UISCrollView 내부의 양식보기 넣어 : 당신이 볼 수 있듯이iOS : 자동 레이아웃을 사용하여 UIScrollview의 내용을 변경하십시오.

[_infoView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_infoView(1730)]" options:0 metrics:nil views:views]]; 

[_scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_infoView]|" options:0 metrics:nil views:views]]; 

[_scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_infoView]|" options:0 metrics:nil views:views]]; 

[_scrollView addConstraint:[NSLayoutConstraint constraintWithItem:_infoView 
                 attribute:NSLayoutAttributeCenterX 
                 relatedBy:NSLayoutRelationEqual 
                  toItem:_scrollView 
                 attribute:NSLayoutAttributeCenterX 
                 multiplier:1 
                 constant:0]]; 

, 내가 첫 번째 줄에서 양식의 높이를 지정할을하고 scrollview 자동으로 컨텐츠 크기를 맞 춥니 다. 이제 폼의 높이를 늘리고 싶습니다. 그래서 높이에 대한 제약 조건을 더 큰 값으로 재설정하려고했지만 작동하지 않습니다. 그런 다음 [_scrollView setContentSize:] 메서드를 사용하려고 시도했지만이 방법도 작동하지 않습니다. 누구든지 제발 도와 주실 래요?

+0

혹시 이것을 알아 냈습니까? 나는 이것을 알아내는 끔찍한 시간을 보내고있다. – mkral

답변

-2

난 당신이 위의 코드를 추가하지만, 아래에 귀하의 초기화 기능에서 문제

를 해결해야하는 위치 확실하지 않다, 아래의 추가

NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; 
     [center addObserver:self selector:@selector(noticeShowKeyboard:) name:UIKeyboardDidShowNotification object:nil]; 
     [center addObserver:self selector:@selector(noticeHideKeyboard:) name:UIKeyboardWillHideNotification object:nil]; 

이 .H

에 아래 추가
CGSize keyboardSize; 
int keyboardHidden;  // 0 @ initialization, 1 if shown, 2 if hidden 

은하는 .m에 아래를 추가

-(void) noticeShowKeyboard:(NSNotification *)inNotification { 
    keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
    keyboardHidden = 1; 
    [self layoutSubviews];  // Not sure if it is called automatically, so I called it 


} 
-(void) noticeHideKeyboard:(NSNotification *)inNotification { 
    keyboardHidden = 2; 
    [self layoutSubviews];  // Not sure if it is called automatically, so I called it 

} 

- (void) layoutSubviews 
{ 
    [super layoutSubviews]; 

    if(keyboardHidden == 1) { 
     scrollview.frame = CGRectMake(scrollview.frame.origin.x, scrollview.frame.origin.y, scrollview.frame.size.width, scrollview.frame.size.height + keyboardSize.height); 
    } 
    else if(keyboardHidden == 2) { 
     scrollview.frame = CGRectMake(scrollview.frame.origin.x, scrollview.frame.origin.y, scrollview.frame.size.width, scrollview.frame.size.height - keyboardSize.height); 
    } 
} 

layoutsubviews을 재정의했습니다. 이제는 제대로 작동해야합니다.

+0

문제는 펜촉이 자동 레이아웃을 사용하는 경우 rect 크기가 제약 조건에 의해 관리되고 diretcly 작동하지 않는다는 것입니다 – mastergap

+1

편집 된 대답을 확인하고 'layoutsubviews'를 무시하면 문제가 해결됩니다. – MuhammadBassio

4

문제를 이해하면 layoutSubviews으로 전화하지 않고 UIScrollView에서 contentInset 속성을 조정하는 것이 좋습니다. 문서의 내용은 다음과 같습니다.

콘텐츠 주변의 스크롤 영역에 추가하려면이 속성을 사용하십시오. 크기 단위는 점입니다. 기본값은 UIEdgeInsetsZero입니다.

UIEdgeInsets insets = UIEdgeInsetsMake(0, 0, 100, 0); 
scrollView.contentInset = insets; 
:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 

그런 다음 keyboardWillShow에서이 작업을 수행 할 수 있습니다

당신은 여전히있는 ScrollView의 높이를 조정하는시기를 알 수 있도록 키보드 숨기기/표시 알림을 수신해야

100은 조정할 높이 (scrollView)입니다. 나는 UITableView과 함께 이것을 수행하는데, 나는 폼 요소가 UITableViewCell으로되어 있고 잘 동작한다.

관련 문제