ios - iOS 11 弹出键盘时 UiTextfield 不会向上移动(在以前的版本上工作)

标签 ios swift cocoa-touch

问题:在 ios 11 中不工作(但在 ios 8 中工作)

以下代码是用 Swift 2.0 编写的。但是我的应用程序太大,无法一次性迁移代码并发布更新。

目标: 我想用 xcode 7 发布一个版本,但在 ios 11 上调试时我得到了一个“开发者磁盘镜像”。 那么如何在不迁移代码的情况下修复错误

func viewDidLoad(){

    super.baseScrolllView = scrollView
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardAdjust:"), name:UIKeyboardWillShowNotification, object: nil);
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardAdjust:"), name:UIKeyboardWillHideNotification, object: nil);
}

基类中的代码

var keyboardIsVisible = false
var baseScrolllView: UIScrollView!
func keyboardAdjust(notification: NSNotification) {

    let info = notification.userInfo!
    let keyboardHeight:CGFloat = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue().size.height
    let duration:Double = info[UIKeyboardAnimationDurationUserInfoKey] as! Double

    var userInfo = notification.userInfo!
    var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue()
    keyboardFrame = self.view.convertRect(keyboardFrame, fromView: nil)

    if notification.name == UIKeyboardWillShowNotification && keyboardIsVisible == false{

        keyboardIsVisible = true

        UIView.animateWithDuration(duration, animations: { ()

            var contentInset:UIEdgeInsets = self.baseScrolllView.contentInset
            contentInset.bottom = keyboardFrame.size.height
            self.baseScrolllView.contentInset = contentInset



        })


    }else {
        keyboardIsVisible = false

        UIView.animateWithDuration(duration, animations: { ()
            var contentInset:UIEdgeInsets = UIEdgeInsetsZero
            self.baseScrolllView.contentInset = contentInset
        })
    }

}

最佳答案

这是我获取键盘高度的方法

@objc func keyboardWillShow(_ notification: Notification) {
    guard let userInfo = notification.userInfo, 
          let keyboardSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue, 
          let duration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as? Double else { return }

    containerViewBottomConstraint.constant = keyboardSize.height
    UIView.animate(withDuration: duration) { 
        self.containerView.layoutIfNeeded()
    }
}

关于ios - iOS 11 弹出键盘时 UiTextfield 不会向上移动(在以前的版本上工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46491539/

相关文章:

ios - 如何以编程方式返回具有全局功能的 Root View Controller ?

swift - Swift 结构的值绑定(bind)模式

swift - 当变量首次用于其自身初始化时,如何清除 "Variable ... used before being initialized"错误?

iphone - entityName.state 必须具有已定义的类型

ios - 点击 XIB 文件内的 UIButton 时如何执行 segue

ios - 我的 iOS 应用和 WatchKit 应用完全是 Swift。我需要更改 "Embedded Content Contains Swift"吗?

iphone - UITableView 未正确对齐

ios - 有没有办法让一个按钮在整个 UINavigationController 堆栈中持续存在?

cocoa - 如何在 Cocoa Touch 中将 RGB 转换为 HSV?

ios - 需要解释 iOS 中的@property/@synthesize