为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

iOS
MMTTMM 2019-11-05 15:23:53
我正在尝试为iPhone建立输入屏幕。屏幕上有许多输入字段。它们大多数位于屏幕顶部,但两个字段位于底部。当用户尝试在屏幕底部编辑文本时,键盘将弹出并覆盖屏幕。我找到了一种在发生这种情况时将屏幕向上移动的简单解决方案,但是结果是屏幕始终向上移动,并且当用户尝试编辑屏幕时,屏幕顶部的字段超出了范围。有没有办法让屏幕只有当底部字段编辑动?我使用了在这里找到的这段代码:override func viewDidLoad() {    super.viewDidLoad()            NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil)    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)}func keyboardWillShow(sender: NSNotification) {    self.view.frame.origin.y -= 150}func keyboardWillHide(sender: NSNotification) {    self.view.frame.origin.y += 150}
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

我发现最适合我的一个是:


func textFieldDidBeginEditing(textField: UITextField) {

    if textField == email || textField == password {

        animateViewMoving(true, moveValue: 100)

    }

}


func textFieldDidEndEditing(textField: UITextField) {

    if textField == email || textField == password {

        animateViewMoving(false, moveValue: 100)

    }

}


func animateViewMoving (up:Bool, moveValue :CGFloat){

    let movementDuration:NSTimeInterval = 0.3

    let movement:CGFloat = ( up ? -moveValue : moveValue)


    UIView.beginAnimations("animateView", context: nil)

    UIView.setAnimationBeginsFromCurrentState(true)

    UIView.setAnimationDuration(movementDuration)


    self.view.frame = CGRectOffset(self.view.frame, 0, movement)

    UIView.commitAnimations()

}

您还可以更改高度值。如果要对所有文本字段使用“ if语句”,请删除它。


您甚至可以将其用于所有需要用户输入的控件,例如TextView。


查看完整回答
反对 回复 2019-11-05
  • 3 回答
  • 0 关注
  • 433 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信