对这个基本问题抱歉,我是iOS开发的新手。我在带有AutoLayout的View中有一个UITextField,我想用它来键入聊天系统的消息。但是,当显示键盘时,它会隐藏包含UITextField的视图(整个视图位于键盘后面)。
当键盘从底部过渡时,应该如何将视图与键盘一起移动?当键盘被解除时,UIView应该回到其原始位置(在屏幕的底部)。 我的整个用户界面都是在故事板中使用AutoLayout设计的。
编辑: 我向How do I scroll the UIScrollView when the keyboard appears?查找了一个解决方案,但似乎没有任何迹象表明AutoLayout已在此答案中的约束条件下使用。如何在Storyboard中使用AutoLayout实现同样的目标。再次,对于任何缺乏理解的道歉,因为我对iOS开发很新。
答案 0 :(得分:0)
将UIScrollView添加到视图控制器,并将UITextField保持在scrollview上。
添加UITextFieldDelegate
yourTextField.delegate = self;
您可以在触摸UITextField时设置scrollview的内容偏移量,并在键盘辞职时将其重新定位到(0,0)。
-(void)viewWillAppear:(BOOL)animated
{
yourScrollView.contentSize = CGSizeMake(320, 500);
[super viewWillAppear:YES];
}
-(void)textFieldDidBeginEditing:(FMTextField *)textField
{
[yourScrollView setContentOffset:CGPointMake(0,textField.center.y-140) animated:YES];//you can set your y cordinate as your req also
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
[yourScrollView setContentOffset:CGPointMake(0,0) animated:YES];
return YES;
}
答案 1 :(得分:0)
这是我最近所做的,可能会有所帮助。
我的所有字段都在一个带有顶部约束的包装器视图中。因为对我来说,移动包装器视图上下几个像素就足够了我使用这种方法。 Here是一个滚动视图示例。
我使用IBOutlet来引用此约束
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topConstraint;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//register for keyboard notifications
_keyboardIsShowing = NO;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
然后关于通知方法
#pragma mark - Keyboard notifications methods
- (void)keyboardWillShow:(NSNotification *) notification{
if (!_keyboardIsShowing) {
_keyboardIsShowing = YES;
[UIView animateWithDuration:0.4 animations:^{
//here update the top constraint to some new value
_topConstraint.constant = _topConstraint.constant - 30;
[self.view layoutIfNeeded];
}];
}
}
- (void)keyboardWillHide:(NSNotification *) notification{
if (_keyboardIsShowing) {
[UIView animateWithDuration:0.4 animations:^{
_topConstraint.constant = _topConstraint.constant + 30;
[self.view layoutIfNeeded];
}];
_keyboardIsShowing = NO;
}
}
这里有很多这样的答案。 祝你好运。