一个iOS / Swift库,用于从键盘下方移动内容
此库可以在键盘出现时移动视图,并在键盘隐藏时将它们移回到原位。它包括用于更改底部自动布局约束长度的辅助类。
设置
您可以将UnderKeyboard添加到项目的三种方式。
添加源(iOS 7+)
简单地将UnderKeyboardDistrib.swift添加到您的项目中。
使用Carthage设置(iOS 8+)
或者,将 github "evgenyneu/UnderKeyboard" ~> 13.0
添加到您的 Cartfile 中,并运行 carthage update
。
使用 CocoaPods 配置(iOS 8+)
如果您使用 CocoaPods,请将此文本添加到您的 Podfile 中,并运行 pod install
。
use_frameworks!
target 'Your target name'
pod 'UnderKeyboard', '~> 13.0'
旧版 Swift 版本
如果您使用较旧版本的 Swift,请设置库的 上一个版本。
使用方法
如果您使用 Carthage 或 CocoaPods 配置方法,请在您的源代码中添加 import UnderKeyboard
。
将内容向上移动
当屏幕上出现键盘时,可能会导致您的视图被遮挡。防止这种情况的一种方法是创建一个底部 Auto Layout 约束,并增加其长度。可以使用 UnderKeyboardLayoutConstraint
辅助类来实现这一点。注意,底部布局约束关系可以是简单的 equal
关系,也可以是 demo 应用程序的登录屏幕中使用的 greater than
关系。
@IBOutlet weak var bottomLayoutConstraint: NSLayoutConstraint!
let underKeyboardLayoutConstraint = UnderKeyboardLayoutConstraint()
override func viewDidLoad() {
super.viewDidLoad()
underKeyboardLayoutConstraint.setup(bottomLayoutConstraint, view: view)
}
注意:bottomLayoutConstraint
的底部边缘应连接到父视图,而不是布局指南或安全区域。
直接使用键盘观察者
此库包含名为 UnderKeyboardObserver
的类,您可以使用它来编写自己的自定义逻辑。您可以为该观察者提供在键盘显示和隐藏时将被调用的函数。您的函数将收到键盘的高度。如果键盘正在隐藏,则高度参数为零。
let keyboardObserver = UnderKeyboardObserver()
override func viewDidLoad() {
super.viewDidLoad()
keyboardObserver.start()
// Called before the keyboard is animated
keyboardObserver.willAnimateKeyboard = { height in
myConstraint.constant = height
}
// Called inside the UIView.animateWithDuration animations block
keyboardObserver.animateKeyboard = { height in
myView.layoutIfNeeded()
}
}
获取键盘高度
使用UnderKeyboardObserver
对象的currentKeyboardHeight
属性来获取当前键盘高度。必须首先调用start
方法以开始监听键盘通知。currentKeyboardHeight
返回的值如果键盘状态未知可以被设置为nil
。这种情况可能发生在调用start
方法后没有发生键盘通知,因此我们不知道键盘是否可见或隐藏。
let keyboardObserver = UnderKeyboardObserver()
override func viewDidLoad() {
super.viewDidLoad()
keyboardObserver.start()
}
func myFunction() {
print("Keyboard height: \(keyboardObserver.currentKeyboardHeight)")
}
版本11中的API更改
在版本11中,移除了UnderKeyboardLayoutConstraint
类中用于setup
方法的bottomLayoutGuide
属性。为了正确计算底边约束高度,现在应该将其底边与superview连接,而不是与布局指南或安全区域。superview应该是与应用程序窗口大小匹配的视图。
参考资料
许可
UnderKeyboard是在MIT许可证下发布的。