代码之家  ›  专栏  ›  技术社区  ›  Erent

当键盘显示时,将视图上移,用于堆栈视图中的文本字段

  •  0
  • Erent  · 技术社区  · 6 年前

    我有一个场景,当键盘出现时,我将视图向上移动,这个场景可以正常工作,但是只要我开始键入,视图就会回到原来的位置。需要注意的是textfield在stackview中。

    我的问题是,有没有一种方法可以阻止视图在文本编辑开始时返回到其原始位置。

    override func viewDidLoad() {
    
        super.viewDidLoad()
    
        NotificationCenter.default.addObserver(self, selector:#selector(self.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
        NotificationCenter.default.addObserver(self, selector:#selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
    }
    
     var isScroll = false
    
    
    @objc func keyboardWillShow(sender: NSNotification) {
        mainView.frame.origin.y = -100
    }
    @objc func keyboardWillHide(sender: NSNotification) {
        mainView.frame.origin.y = 0
    }
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   Midhun Narayan    6 年前

    添加一个scrollview作为基本视图,然后在这个视图中添加contentview

    func keyboardShown(_ notification: Notification){
    
        var userInfo        = notification.userInfo!
        let keyboardSize    = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue
        let contentInsets   = UIEdgeInsetsMake(0.0, 0.0, (keyboardSize!.height + 40), 0.0)
        self.mainScrollView.contentInset            = contentInsets
        self.mainScrollView.scrollIndicatorInsets   = contentInsets
    
    
    
        // **-- Scroll when keyboard shows up
        let aRect           = self.view.frame
        self.mainScrollView.contentSize = aRect.size
    
        /* if((self.activeTextField) != nil)
         {
         self.scrollView.scrollRectToVisible(self.activeTextField!.frame, animated: true)
         }*/
    
    }
    
    func keyboardHidden(_ notification: Notification) {
    
        let contentInsets   = UIEdgeInsets.zero
        self.mainScrollView.contentInset            = contentInsets
        self.mainScrollView.scrollIndicatorInsets   = contentInsets
    
        // **-- Scroll when keyboard shows up
        self.mainScrollView.contentSize = self.containerView.frame.size
    }
    
        2
  •  0
  •   Rushabh Shah    6 年前

    我个人的意见是用这个 library 否则,您可以在UITableview中管理整个UI,这样就不需要在该控制器中管理keyboardWillShow和keyboardWillHide方法。