我有一个自定义UIView
,它是UIViewController
的子视图。
我已将其添加到情节提要中,并将其设置为“隐藏”。
我的子视图也位于另一个我最初用作“模糊视图”的UIView
中。
我具有取消隐藏和隐藏子视图的功能。
我的自定义子视图有一个UITextField
。我可以显示键盘并毫无问题地向上移动子视图。当我输入或关闭键盘时,我的子视图会向上和向左移动。当我尝试再次显示子视图时,它显示不正确(从上到左)。
自定义子视图从屏幕中心开始。
目标是在显示键盘时将其上移,以使其不会覆盖子视图或UITextField
,允许用户键入UITextField
,然后关闭键盘并移动自定义子视图返回中心。
在我的UIViewController中:
// Showing the custom sub view
func displayCustomSubView() {
if let window = UIApplication.shared.keyWindow {
self.blurView.isHidden = false
self.customSubView.isHidden = false
self.blurView.frame = window.frame
self.customSubView.center = window.center
window.addSubview(self.blurView)
UIApplication.shared.keyWindow?.bringSubviewToFront(self.blurView)
}
}
// Hiding the custom sub view
// the custom sub view has a button I tap to hide
@objc func dismissCustomSubView() {
self.blurView.isHidden = true
self.customSubView.isHidden = true
}
// Show Keyboard
// Since I am using the window to make sure my blur view expands to the full frame, I have tried just moving the window up
@objc func keyboardWillShow(sender: NSNotification) {
if let window = UIApplication.shared.keyWindow {
window.frame.origin.y = -75
}
}
// Hide Keyboard
@objc func keyboardWillHide(sender: NSNotification) {
if let window = UIApplication.shared.keyWindow {
window.frame.origin.y = 0
}
}
// Custom Subview Extension
extension CustomSubView: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
在上面添加了“自定义子视图扩展”。
答案 0 :(得分:0)
首先在您的viewDidLoad()中添加此通知。并创建一个名为 timestamp() ->
ErlangSystemTime = erlang:system_time(microsecond),
MegaSecs = ErlangSystemTime div 1000000000000,
Secs = ErlangSystemTime div 1000000 - MegaSecs*1000000,
MicroSecs = ErlangSystemTime rem 1000000,
{MegaSecs, Secs, MicroSecs}
的全局变量:
var keyboardH: CGFloat = 0
下面的功能:
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillShow),
name: UIResponder.keyboardWillShowNotification,
object: nil
)
每次存在键盘时都会调用此函数,它将显示键盘高度,稍后我们可以使用此变量。
所以在您的代码中:
@objc func keyboardWillShow(_ notification: Notification) {
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardRectangle = keyboardFrame.cgRectValue
let keyboardHeight = keyboardRectangle.height
self.keyboardH = keyboardHeight
}