键盘显示时如何以编程方式移动StatView

Posted

技术标签:

【中文标题】键盘显示时如何以编程方式移动StatView【英文标题】:How to move StatView programmatically when keyboard shows 【发布时间】:2020-03-11 10:14:46 【问题描述】:

我有一个登录页面,其中有两个文本视图和一个堆栈视图中的按钮 当键盘显示并消失时,我正在尝试移动堆栈视图,因为我想知道如何以编程方式执行此操作

【问题讨论】:

【参考方案1】:

当键盘显示/隐藏时,ios 会发送 2 个通知

UIKeyboardWillShow

UIKeyboardWillHide

您可以做的是观察这些通知,然后移动 stackView 的框架,例如

@objc func keyboardWillShow() 
    if stackView.frame.origin.y == 0 
      stackView.frame.origin.y -= 200
   


@objc func keyboardWillHide() 
     if stackView.frame.origin.y != 0 
        stackView.frame.origin.y = 0
      
 

这里是观察这些通知的方法。 (在您的 viewDidLoad 函数中使用此代码)

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: Notification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: Notification.Name.UIKeyboardWillHide, object: nil)

【讨论】:

我添加了该代码但收到此错误,类型“Notification.Name”(又名“NSNotification.Name”)没有成员“UIResponder” 通知名称是 UIViewController.keyboardWillShow 和 UIViewController.keyboardWillHide。可以试试吗? 这行得通,但现在它说使用未解析的标识符“stackView”它不会让我在使用 if 语句时访问 stackView 用实际堆栈视图的名称替换“stackView”...【参考方案2】:

斯威夫特 4.2

override func viewDidLoad() 
    super.viewDidLoad()   
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIWindow.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: UIWindow.keyboardWillHideNotification, object: nil)


   @objc func keyboardWillShow(notification: NSNotification) 
         print("keyboardWillShow")
    

    @objc func keyboardWillHide(notification: NSNotification)
         print("keyboardWillHide")
    

如果仍然有任何错误检查以下链接:

LINK FOR KEYBOARD HIDE/SHOW

【讨论】:

以上是关于键盘显示时如何以编程方式移动StatView的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式在iPhone键盘顶部移动工具栏

键盘出现时如何向上移动集合视图控制器?

如何以编程方式折叠 UIView?

使用 React native 以编程方式显示键盘

出现键盘时以编程方式更新约束

以编程方式显示/隐藏虚拟键盘