我有一个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