2016-01-20 84 views
0

所以,我有这个视图,这只是我想要在视图中居中的粉红色快照的包装。我一直在顶部布局指南和视图顶部之间使用两个间距视图,该视图将文本框和屏幕底部的发送按钮(白色框)包裹起来。从下面的图片可以看出,这工作得很好。ios在显示键盘上强制自动布局更新

enter image description here

现在,由于这将是一个“留下您的评论”页面,用户需要拉动键盘了,和自动版式noeeds进行相应的更新。我试图调用[self.view setNeedsLayout],[self.view updateConstraints],[self.view layoutIfNeeded],但他们都没有办法。我所拥有的是这样的:

enter image description here

你可能认为我做错了什么的自动布局,但后来当我旋转屏幕,如预期的布局更新,调整了2点间隔意见,并保持快乐粉红色的图片在中心:

enter image description here

我怎样才能触发布局更新?我要疯了!!

请告诉我,如果你需要更多的信息

+0

调整您在键盘出现时查看的大小。 – sanjeet

+0

只是因为词可能是骗人的,下面是我试图实现的效果的图片:https://imgur.com/ckXEina – overkill

+0

你可以显示较低的白色UIView的限制吗? – juanjo

回答

0

添加观察员通知您,当键盘出现或消失,按以下条件适应您的看法:

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 

然后实现这些方法。

- (void)keyboardWillShow:(NSNotification*)notification 
{ 
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
    // the above is the keyboard size, implement prober view resizing as you wish, but i recommend a scrollview and you scroll it. 
} 

然后

- (void)keyboardWillHide:(NSNotification *)notification 
{ 
    //get everything back to original size or set the scrollview content size back to block scrolling. 
} 

末不要忘记被用于键盘观察员删除自己在视图中消失

- (void)viewWillDisappear:(BOOL)animated { 
[[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 
+0

当键盘正在被拉动时,我已经可以使用文本框移动视图向上。我的问题涉及触发自动布局更新时,键盘显示为了调整2白色视图和视图之间 – overkill

+0

尝试调用[self.view layoutIfNeeded]之间的图片; –

+0

......你有没有读过我写过的东西?!我清楚地说过,我已经说过了。 – overkill

1

可能有很多原因布局不符合你的想法,它可能是约束,它定义了两个白色UIViews的高度,这个视图的垂直拥抱或压缩阻力的优先级等等,但是我猜测这两个观点可能是问题的根源。

所以,如果两个白色UIViews的唯一目的是为了粉红色的照片居中,我建议你摆脱它们,而不是你可以把粉红色的照片放在一个UIView里面,约束

Image constraints

正如你可以看到有两个对齐居中约束的ImageView的,还有三个约束的情况下,帮助您支持横向,如果你是在横向图像可能不会适合蓝色视图,以便您可以添加两个大于约束和宽高比约束。

现在,包含图像的浅蓝色视图只有四个约束:textField包装的前导,尾随,顶部和水平空间约束,因此当键盘出现并向上移动textField包装时,containerView会收缩并图像移动到中心。

+0

感谢您花时间回答我!我摆脱了2个白色的意见,但问题依然存在。包装视图基本上是从屏幕的顶部直到包装的正面,同时有两个垂直间距costrain设置为0.但是,当我将键盘拉起时(并成功移动了纺织包装视图),图片的包装视图仍然停留在底部,就像什么都没有发生...... :( – overkill

+0

你如何移动textField包装视图?你是否改变这个包装和底部布局指南之间的约束常量? – juanjo

+0

mmm nope,我只是计算键盘有多高,然后将值添加到帧起源...有没有一个步骤我失踪?! – overkill