【发布时间】:2017-05-05 15:25:14
【问题描述】:
我有一个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 具有固定的高度、宽度和垂直居中。
【问题讨论】:
-
别忘了
- (void)viewWillLayoutSubviews -
使用自动布局,您无需调整视图框架。而是调整导致视图框架的约束(在这种情况下,超级视图常量的顶部空间可能会变小)。或者将视图放在滚动视图上并滚动它。
-
是的,我会采用这个解决方案。看起来是最容易做的事情。目前,更新约束对我来说真的不起作用。
标签: ios objective-c autolayout uikeyboard