ios强制显示键盘上的autolayout更新

时间:2016-01-20 13:18:06

标签: ios iphone layout autolayout ios9

所以,我有这个视图,它只是我想要在视图中居的快乐粉红色照片的包装。我一直在顶部布局指南和视图顶部之间使用两个间距视图,它们包裹文本框和屏幕底部的发送按钮(白色)。从下图中你可以看到它工作得很好。

enter image description here

现在,由于这将是一个“留下你的评论”页面,用户需要拉起键盘,并且自动布局需要相应地更新。我试着调用[self.view setNeedsLayout],[self.view updateConstraints],[self.view layoutIfNeeded],但他们都没有做到这一点。我只有这个:

enter image description here

您可能会反对我在自动布局中做错了什么,但是当我旋转屏幕时,布局会按预期更新,调整2个间距视图的大小并将快乐的粉红色图片保留在中心:

enter image description here

如何触发布局更新?我疯了!!

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

2 个答案:

答案 0 :(得分:1)

可能有很多原因导致布局不按照您想要的方式运行,可能是限定两个白色UIViews的高度的约束,此视图的垂直拥抱或抗压缩的优先级等,但我想这两个观点可能是问题的根源。

所以,如果两个白色UIViews的唯一目的是将粉红色照片居中,我建议你摆脱它们,相反,你可以将粉红色照片放在一个UIView中,并将照片放在几个对齐约束中心

Image constraints

正如您所看到的,对于imageView有两个对齐中心约束,另外三个约束有助于您支持横向,如果您处于横向,图像可能不适合蓝色视图所以你可以添加两个大于约束和一个宽高比约束。

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

答案 1 :(得分:0)

添加观察者以在键盘出现时通知您,或者消失以通过以下方式调整您的视图:

- (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]; 
}

最后,当视图消失时,不要忘记让自己不再是键盘的观察者

col1,col2,col3,col4,col5,col6
abc,edf,"123,456,789","1,234","133,233,456",20/01/2016
ogfsf,dcfdc,0,"1,456","134,567,456",11/01/2016
jkglt,mnbc,0,0,"132,467,876",05/01/2016