在UITextField中插入文本后,不需要的UIView框架被重置。

问题描述 投票:1回答:1

我被一些有趣的问题卡住了,没办法解决了。在我的一个控制器中,我使用了一个简单的方案,根据键盘的外观调整视图框架。

在我的一个控制器中,我使用了一个简单的方案,根据键盘的外观来调整视图框。UITextFieldDelegate 方法,我初始化控制器的属性 firstResponder:

func textFieldDidBeginEditing(_ textField: UITextField) {

    self.firstResponder = textField
}

然后,我使用UIKeyboard通知选择器来改变框架。contentView:

override func keyboardWillShow(_ notifications: Notification) {
    super.keyboardWillShow(notifications)

    let info = notifications.userInfo
    let keyboardFrame:CGRect = (info![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
    let duration:Double = (info![UIKeyboardAnimationDurationUserInfoKey] as! NSNumber).doubleValue

    var bottomY:CGFloat!

    if self.firstResponder == self.emailTextField{
        bottomY = self.emailBottomLine.frame.origin.y + 80 + self.headerView.frame.height
    }
    else {
        return 
    }

    if bottomY >= keyboardFrame.origin.y {

        let offset = bottomY - keyboardFrame.origin.y

        UIView.animate(withDuration: duration, animations: {

            self.contentView.frame.origin.y = -offset
        })

    }else{
        UIView.animate(withDuration: duration, animations: {

            self.contentView.frame.origin.y = self.contentViewOriginY
        })
    }
}

override func keyboardWillHide(_ notifications: Notification) {
    super.keyboardWillHide(notifications)

    let info = notifications.userInfo
    let duration:Double = (info![UIKeyboardAnimationDurationUserInfoKey] as! NSNumber).doubleValue

    UIView.animate(withDuration: duration, animations: {

        self.contentView.frame.origin.y = self.contentViewOriginY
    })
}

一切都很好,直到我开始在里面打字。emailTextField. 每次敲击键盘都会导致 contentView 重置到原来的位置,没有动画。

问题是到底是什么原因导致这种行为?我完全糊涂了,已经检查了任何可能影响这个的东西。请帮助我!!!

swift uiview uitextfield frame uikeyboard
1个回答
1
投票

确保无论是。

A. 你的 contentView 没有附加任何布局约束,否则当你设置它的框架时,它的框架将在下一次布局传递中被重置回约束条件所规定的框架。

或。

B. 使用约束条件来定位你的 contentView的相对于键盘的垂直偏移,而不是调整其框架。

© www.soinside.com 2019 - 2024. All rights reserved.