2012-10-07 172 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

問題是,如果你的筆尖使用自動佈局矩形大小由約束管理,並設置他們diretcly不會工作 – mastergap

+1

檢查編輯的答案,重寫'layoutsubviews'應該解決您的問題... – MuhammadBassio

4

如果我明白了這個問題,我會建議在UIScrollView上調整contentInset屬性,而不是調用layoutSubviews。請注意,文檔說:

使用此屬性添加到您的內容周圍的滾動區域。單位的大小是點。默認值是UIEdgeInsetsZero

你還是要監聽鍵盤隱藏/顯示通知,以便知道什麼時候調整你的滾動視圖的高度:

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

然後在keyboardWillShow,你可以這樣做:

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

100是你想要調整你的高度scrollView。我用UITableView這樣做,其中我有UITableViewCell s的表單元素,它運行良好。

相關問題