我有一个UIView
,无论UIKeyboard
出现还是消失,我都想上下移动。不幸的是,我无法让它发挥作用。
在AutoLayout
之前,这是一个不费脑子的事情,但是自AutoLayout
以来我遇到了这个问题。
这是我到目前为止所做的:
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification object:nil];
self.keyboardIsShown = NO;
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIKeyboardWillHideNotification
object:nil];
}
-(void)keyboardWillShow:(NSNotification*)notification{
if (self.keyboardIsShown) {
return;
}
//change y Position of self.loginView
self.keyboardIsShown = YES;
}
-(void)keyboardWillHide:(NSNotification*)notification{
//Change y Position of self.loginView
self.keyboardIsShown = NO;
}
当然这些方法被调用但我需要一些关于如何更改UIView
的y位置的指导。只是改变框架的y位置根本不起作用。
在这里,您可以找到我添加到UIView的约束的界面设置。
因此UIImageView
以外的所有组件都包含在loginView Outlet
中。这是我想要根据键盘显示与否来移动或关闭的视图。
这对我来说很难,就像你可能看到的那样,UIImageView有一个固定的高度,宽度和垂直居中。
答案 0 :(得分:4)
我刚刚完成了这件事。基本上,包装您在容器视图中移动所需的所有内容,然后与键盘显示/隐藏通知一起设置顶部约束常量的动画。
for (Animal animal : animals)
在通知中是一个userInfo,它会告诉您键盘的高度,还可以让您的动画与键盘同步,以实现平滑过渡。
答案 1 :(得分:0)
到目前为止,我所做的是获取我们想要上下移动的视图的原始框架。确保你在ViewDidAppear中得到它而不是ViewDidLoad
-(void)viewDidAppear:(BOOL)animated
{
_loginHolderOriginalFrame = self.loginHolderView.frame;
}
以下功能将用于显示/隐藏键盘
-(void) _keyboardWillShow:(NSNotification *)note
{
[self.view layoutIfNeeded];
[UIView animateWithDuration:0.25 animations:^{
self.logoImageView.alpha = 0;
CGRect rect = _loginHolderOriginalFrame; // bounds
rect.origin.y = 15;
[self.loginHolderView setFrame:rect];
}];
}
-(void) _keyboardWillHide:(NSNotification *)note
{
[self.view layoutIfNeeded];
[UIView animateWithDuration:0.5f animations:^{
self.logoImageView.hidden = NO;
}];
[self restoreLoginFrame];
}
-(void)restoreLoginFrame
{
[UIView animateWithDuration:0.25 animations:^{
self.logoImageView.alpha = 1;
[self.loginHolderView setFrame:_loginHolderOriginalFrame];
}];
}
当我们显示键盘时,我们将视图向上移动到位置y,例如等于15.如果键盘被隐藏,我们将视图移回原始位置。
希望有所帮助。
答案 2 :(得分:-1)
键盘出现时移动UIView(没有滚动视图)
我最近也有一个非常相似的应用程序设计&除此之外没什么用。我有没有滚动视图只是一个视图&所有组件都在里面。
- (void)viewWillAppear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
- (void)viewWillDisappear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}
- (void)keyboardWillShow:(NSNotification *)notification
{
CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
[UIView animateWithDuration:0.3 animations:^{
CGRect f = self.view.frame;
f.origin.y = -keyboardSize.height;
self.view.frame = f;
}];
}
-(void)keyboardWillHide:(NSNotification *)notification
{
[UIView animateWithDuration:0.3 animations:^{
CGRect f = self.view.frame;
f.origin.y = 0.0f;
self.view.frame = f;
}];
}