出现键盘时移动文本字段会覆盖(Swift)中的顶部文本字段

Posted

技术标签:

【中文标题】出现键盘时移动文本字段会覆盖(Swift)中的顶部文本字段【英文标题】:Moving textfield when keyboard appears is covering up top textfields in (Swift) 【发布时间】:2015-05-01 13:18:52 【问题描述】:

我第一次遇到屏幕底部的文本字段问题,因为键盘会覆盖它们。现在我解决了这个问题,我有了一个新问题。当我尝试在屏幕顶部的文本字段中输入文本时,屏幕会升起并且不让我看到我正在输入的内容。

我认为我最理想的做法是改变键盘向上推动屏幕的程度。下面是我用于初始更改的代码。

我两周前刚开始学习开发,所以我仍然熟悉所有语法和功能。

var kbHeight: CGFloat!

override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.



override func viewWillAppear(animated:Bool) 
    super.viewWillAppear(animated)

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)


override func viewWillDisappear(animated: Bool) 
    super.viewWillDisappear(animated)

    NSNotificationCenter.defaultCenter().removeObserver(self)


func keyboardWillShow(notification: NSNotification) 
    if let userInfo = notification.userInfo 
        if let keyboardSize =  (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() 
            kbHeight = keyboardSize.height
            self.animateTextField(true)
        
    


func keyboardWillHide(notification: NSNotification) 
    self.animateTextField(false)


func animateTextField(up: Bool) 
    var movement = (up ? -kbHeight : kbHeight)

    UIView.animateWithDuration(0.3, animations: 
        self.view.frame = CGRectOffset(self.view.frame, 0, movement)
    )

【问题讨论】:

您发布的代码有问题吗?它与您的预期结果有何不同? 这不是正确的方法,您正在移动一个固定的 kbHeight。请阅读Managing the Keyboard。同样在您当前的上下文中,您还应该考虑所选文本字段的y 位置 代码可以正常工作,但如果屏幕上半部分有一个文本字段,它将向上移动到我看不到我正在输入的内容的位置。 这就是为什么我说你应该考虑y所选文本字段的位置,如果它在上半部分,不要移动,否则移动。但这仍然不是正确的方法。请以正确的方式浏览我之前发布的链接。 感谢您的帮助!我现在正在读它:) 【参考方案1】:

这是一个建议

而不是设置 View 的框架。将视图放在 UIScrollView 中。 然后在您的 keyboardWillShow 和 keyboardWillHide 方法中相应地调整滚动视图框架。

并使用 textfield 委托方法中的“scrollRectToVisible”设置滚动视图的内容偏移量。

- (void) textFieldDidBeginEditing:(UITextField *)textField

  CGRect rectText = textField.frame;
  self.scrollVIew scrollRectToVisible:rectText animated:TRUE];

【讨论】:

以上是关于出现键盘时移动文本字段会覆盖(Swift)中的顶部文本字段的主要内容,如果未能解决你的问题,请参考以下文章

当键盘出现Swift时,使用文本字段和按钮向上移动视图

使用 Swift 使用键盘移动视图

仅当键盘覆盖输入字段时才向上移动视图

当我在 swift 中单击单元格中的文本字段时,键盘没有出现

键盘出现多次时,滚动视图不会向上移动

当用户单击 UIWebView 内的文本字段时,出现键盘后屏幕不会向上移动