2013-01-03 148 views
0

我想在鍵盤顯示時調整UITextView的大小,但似乎無法執行此操作。我創建了一個包含UITextView的視圖。在代碼中,我想手動調整此文本視圖的高度。我這樣做:當鍵盤彈出自動佈局時調整UITextView的大小

_textView.translatesAutoresizingMaskIntoConstraints = NO; 

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:_textView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:216.0f]; 
[_textView addConstraint:constraint]; 

在Interface Builder中,我說,文本視圖和上海華之間的餘量可以大於或等於0

當我運行的應用程序,它給人的錯誤該約束不能同時滿足:

"<NSLayoutConstraint:0x886e550 V:[UITextView:0x7b0fa00(216)]>", 
"<NSLayoutConstraint:0x886f7c0 UITextView:0x7b0fa00.bottom == UIView:0x886e3c0.bottom>", 
"<NSLayoutConstraint:0x886f700 V:|-(0)-[UITextView:0x7b0fa00] (Names: '|':UIView:0x886e3c0)>", 
"<NSAutoresizingMaskLayoutConstraint:0x71a2d10 h=--- v=--- V:[UIWindow:0x8a792f0(480)]>", 
"<NSAutoresizingMaskLayoutConstraint:0x71a1490 h=-&- v=-&- UIView:0x886e3c0.height == UIWindow:0x8a792f0.height - 20>" 


Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x886e550 V:[UITextView:0x7b0fa00(216)]> 

我不確定如何確保滿足所有約束。有誰能幫我一下嗎?

謝謝!

+0

這是否有幫助? http://stackoverflow.com/questions/14105420/animating-text-box-when-clicked/14107365#14107365我讓我的視圖控制器的view.frame在鍵盤出現時較短,而在鍵盤消失時較高,類似於消息應用程序的行爲。 –

回答

-1

可能的重複

How to resize UITextView on iOS when a keyboard appears?

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) 
              name:UIKeyboardWillShowNotification object:self.view.window]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) 
              name:UIKeyboardWillHideNotification object:self.view.window]; 

- (void)keyboardWillShow:(NSNotification *)notif 
{ 
[thetextView setFrame:CGRectMake(20, 49, 280, 187)]; //Or where ever you want the view to go 


} 

- (void)keyboardWillHide:(NSNotification *)notif 
{ 
[thetextView setFrame:CGRectMake(20, 49, 280, 324)]; //return it to its original position 

} 
8

對於iOS7,設置UIEdgeInsets而不是調整視圖的大小可能會更好,因爲我們有時會處理半透明。在某些應用程序中,我們仍然希望看到文本滾動瀏覽工具欄,鍵盤或其他UI覆蓋圖。另一個好處是,動畫通常不需要在「幕後」發生的情況下更改內容插入。

蘋果在其開發人員資源中提供了一個非常簡單和優雅的解決方案,儘管它有點被埋沒,很難找到。這裏是一個鏈接:

https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html

轉到清單5-1爲一個完整的代碼片段。

+0

自iOS7以來,這應該是被接受的答案。只是要知道,你想「調整大小」的視圖可能不等於'contentInset'和'scrollIndicatorInsets',所以也許你應該在'keyboardWasShown'中複製它們,而不是將它們設置爲'UIEdgeInsetsZero',然後恢復'keyboardWillBeHidden'。 –

+0

我剛剛嘗試過使用iOS9.3,它似乎與自動佈局配合良好。 –

相關問題