键盘显示时更改自动布局常量
change autolayout constant when keyboard shows
我有一个 TopContainer 视图,然后是一个 Scrollview,然后又是一个 BottomContainer 视图。
现在的约束是滚动视图的顶部位于 topContainer 的底部,滚动视图的底部位于 bottomcontainer 的顶部。
当我启动 viewcontroller 并看到视图层次结构时它很好。
但是当键盘显示时,我想修改自动布局约束,使底部容器向上移动。
所以我想我保存约束并像这样更改常量:
private var toolbarBottomConstraint: NSLayoutConstraint?
self.toolbarBottomConstraint = self.toolbar.autoPinEdgeToSuperviewEdge(.Bottom, withInset: 0)
然后当键盘弹出时我这样做:
func keyboardWillShow(notification:NSNotification){
var userInfo = notification.userInfo!
var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue()
keyboardFrame = self.view.convertRect(keyboardFrame, fromView: nil)
self.toolbarBottomConstraint?.constant = keyboardFrame.size.height
}
这没有任何作用。键盘高度正好是底部需要在键盘顶部的偏移量。
为什么视图没有改变?我总是像那样更改常量并且它总是有效。我是否需要做一些特别的事情,因为它现在与键盘一起使用。
你试过在设置约束后调用setNeedsLayout()
吗?:
self.toolbarBottomConstraint?.constant = keyboardFrame.size.height
self.view.setNeedsLayout()
如果您正在为 iOS 9 或更高版本构建,我写了一个 simple library 来负责在出现键盘时自动调整视图。它非常灵活,应该可以无缝工作。
如果您仍然想自己滚动它,那么您似乎还没有在任何地方为通知添加侦听器。在将消息发送到 keyboardWillShow(_:)
方法之前,您需要这样做。
我有一个 TopContainer 视图,然后是一个 Scrollview,然后又是一个 BottomContainer 视图。
现在的约束是滚动视图的顶部位于 topContainer 的底部,滚动视图的底部位于 bottomcontainer 的顶部。
当我启动 viewcontroller 并看到视图层次结构时它很好。
但是当键盘显示时,我想修改自动布局约束,使底部容器向上移动。
所以我想我保存约束并像这样更改常量:
private var toolbarBottomConstraint: NSLayoutConstraint?
self.toolbarBottomConstraint = self.toolbar.autoPinEdgeToSuperviewEdge(.Bottom, withInset: 0)
然后当键盘弹出时我这样做:
func keyboardWillShow(notification:NSNotification){
var userInfo = notification.userInfo!
var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue()
keyboardFrame = self.view.convertRect(keyboardFrame, fromView: nil)
self.toolbarBottomConstraint?.constant = keyboardFrame.size.height
}
这没有任何作用。键盘高度正好是底部需要在键盘顶部的偏移量。
为什么视图没有改变?我总是像那样更改常量并且它总是有效。我是否需要做一些特别的事情,因为它现在与键盘一起使用。
你试过在设置约束后调用setNeedsLayout()
吗?:
self.toolbarBottomConstraint?.constant = keyboardFrame.size.height
self.view.setNeedsLayout()
如果您正在为 iOS 9 或更高版本构建,我写了一个 simple library 来负责在出现键盘时自动调整视图。它非常灵活,应该可以无缝工作。
如果您仍然想自己滚动它,那么您似乎还没有在任何地方为通知添加侦听器。在将消息发送到 keyboardWillShow(_:)
方法之前,您需要这样做。