我有一個iPhone 6應用程序(六件事),我在iOS 6中編寫,其中有一個用戶將文本輸入到UITextView中的屏幕。顯示鍵盤時,UITextView的大小會自動縮短,以便在用戶鍵入時,光標不會隱藏在鍵盤後面(請參見圖片)。如何根據用戶操作在iOS 7中更改UIView(UITextView)的大小
我用下面的處理要做到這一點:
當被顯示的鍵盤:
- (void)keyboardDidShow:(id)sender
{
NSDictionary* info = [sender userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
_txtSizeBase = self._txtInfo.frame;
float offset = kbSize.height < kbSize.width?kbSize.height:kbSize.width;
_txtSizeKeyboard = CGRectMake(_txtSizeBase.origin.x, _txtSizeBase.origin.y, _txtSizeBase.size.width, _txtSizeBase.size.height-offset+60);
self._txtInfo.frame = _txtSizeKeyboard;
...
}
當 「完成」 按鈕被按下,並且鍵盤被駁回:
- (void)keyboardDidHide:(id)sender
{
self._txtInfo.frame = _txtSizeBase;
...
}
這在IOS 6中,但iOS的7效果很好,我不知道的方式來強制視圖以改變其大小後的viewDidLoad中已經被調用。更改框架的大小不會導致它調整大小。
我已經關閉了此窗體上的自動佈局,因此我可以讓屏幕爲iOS 6/7(在界面構建器中使用deltas)正確調整元素(y位置)。
任何有幫助的建議,將不勝感激。
----------------------編輯方案------------------- ----------
因爲解決這個問題有點棘手,我認爲這將是有益的發佈它。
我添加iOS6的一個第二文件的.xib(I只釋放爲IOS 6+)與自動佈局關斷,並根據需要調整的位置。然後,我做到以下幾點:
- (ID)initWithNibName:(![DeviceInfo isIOSAfter70):(的NSString *)nibNameOrNil束(一個NSBundle *)nibBundleOrNil { 如果 { 自我= [超級initWithNibName:@」 CreateRecordViewControllerIOS6「bundle:nibBundleOrNil]; } else { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; }}
**這是不是最完美的解決方案,但它的作品,我只是想支持iOS 6的用戶,而不是用iOS 6的開發前進,所以它是。**
- 我開啓自動佈局形式:
予設定的底部約束在文本視圖上並將其綁定到名爲_bottomConstraint的IBOutlet。
我修改爲KeyboardDidShow /隱藏處理程序如下:
- (無效)keyboardDidHide:(ID)發送方 { ... 如果([DeviceInfo isIOSAfter70]) { if(_bottomConstraint!= nil) _bottomConstraint.constant = _bottomConstraintConstant; // IOS7 + if(_bottomConstraint!= nil) [self.view layoutIfNeeded]; } } ... }
- (無效)keyboardDidShow:(ID)發送方 { ... 如果([DeviceInfo isIOSAfter70]) {// IOS7 + 如果(_bottomConstraint =零) { _bottomConstraintConstant = _bottomConstraint.constant; _bottomConstraint.constant + = kbSize.height; [self.view layoutIfNeeded]; }} ... }
在iOS 7中更改'view'的'frame'沒有任何改變。您的代碼將像以前一樣工作。我認爲你做了其他錯誤。 – ismailgulek
嗯....它似乎並沒有在模擬器正常工作...我會嘗試一個真正的手機上,也許模擬器是騙我... – FuzzyBunnySlippers
我檢查了一個真實的設備,iPhone 4與iOS 7.它在那裏被打破,但在iOS 6中用於模擬器(並且以前在iPhone上的iOS 6中)按預期工作。 – FuzzyBunnySlippers