Swift 找出UIKeyboard.frame何时与其他帧相交?

Swift 找出UIKeyboard.frame何时与其他帧相交?,swift,swift3,uitextfield,uikit,Swift,Swift3,Uitextfield,Uikit,我需要找出textfield何时成为第一响应者,以通知我即将显示的键盘是否会妨碍UITextField。如果有,我想调整scrollview属性 到目前为止,我有这个设置。我正在侦听调用以下选择器的UIKeyboardWillShow通知: func keyboardWillAppear(notification:NSNotification) { if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserIn

我需要找出textfield何时成为第一响应者,以通知我即将显示的键盘是否会妨碍UITextField。如果有,我想调整scrollview属性

到目前为止,我有这个设置。我正在侦听调用以下选择器的UIKeyboardWillShow通知:

func keyboardWillAppear(notification:NSNotification)
{
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
    {

        if keyboardSize.intersects(textField.frame)
        {
            print("It intersects")
        }
        else
        {
            print("Houston, we have a problem")
        }
    }
注意:我尝试了UIKeyboardDidShow,但仍然没有成功。UITextField是scrollView的子视图

  • 听键盘大小的变化
  • 转换坐标
  • 工作样本:

     @IBOutlet weak var textView: UITextView!
     override func viewDidLoad() {
        super.viewDidLoad()
    
        //keyboard observers
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil)
    }
    
    func keyboardWillChange(notification:NSNotification)
    {
        print("Keyboard size changed")
    
        if let keyboardSize = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? CGRect {
            //convert gotten rect
            let r = self.view.convert(keyboardSize, from: nil)
    
            //test it
            if r.intersects(textView.frame) {
                print("intersects!!!")
            }
        }
    }
    
    func keyboardWillAppear(notification:NSNotification)
    {
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
        {
            if keyboardSize.origin.y < textField.frame.origin.y + textField.frame.size.height {
                 print("It intersects")
            } else {
                print("Houston, we have a problem")
            }
        }
    }
    

    比较一下键盘的起始位置和文本的结束位置如何

    工作样本:

     @IBOutlet weak var textView: UITextView!
     override func viewDidLoad() {
        super.viewDidLoad()
    
        //keyboard observers
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil)
    }
    
    func keyboardWillChange(notification:NSNotification)
    {
        print("Keyboard size changed")
    
        if let keyboardSize = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? CGRect {
            //convert gotten rect
            let r = self.view.convert(keyboardSize, from: nil)
    
            //test it
            if r.intersects(textView.frame) {
                print("intersects!!!")
            }
        }
    }
    
    func keyboardWillAppear(notification:NSNotification)
    {
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
        {
            if keyboardSize.origin.y < textField.frame.origin.y + textField.frame.size.height {
                 print("It intersects")
            } else {
                print("Houston, we have a problem")
            }
        }
    }
    
    func键盘将出现(通知:NSNotification)
    {
    如果让keyboardSize=(notification.userInfo?[UIKeyboardFrameEndUserInfoKey]作为?NSValue)?.cgRectValue
    {
    如果keyboardSize.origin.y
    @Dalj Djan,这很有帮助。然而,我只需要在convert func中做一个小的调整,因此,将nil改为我的scrollView,因为我的textfield是scrollView的一个子视图。谢谢兄弟。