【问题标题】:Views Positions Reset when Keyboard Shows键盘显示时视图位置重置
【发布时间】:2016-06-06 14:34:23
【问题描述】:

亲爱的,

我有以下场景:

  • 我在屏幕“上视图和下视图”中有两个视图
  • 上部视图占据整个屏幕,下部视图不可见,因为它向下“其 Y 轴从另一个视图高度的末端开始”
  • 当用户按下按钮时,我会向上移动两个视图,以使下部视图可见而上部视图隐藏。

一切都很好,问题出在:

下部视图中有一个文本框,当用户选择它添加文本时,键盘会显示并将所有视图重置为其初始位置,这会破坏“上部视图再次显示”的一切。

这是我用来移动视图的代码:

@IBAction func signInWithEmailPressed(sender: AnyObject) {

    UIView.animateWithDuration(1, delay: 0, options: .CurveEaseInOut, animations: {
        self.topView.center.y -= self.topView.bounds.height
        self.bottomView.center.y -= self.topView.bounds.height
        }, completion: { finished in
            if(finished) {

                self.view.layoutIfNeeded()
            }
    })
}

不知道为什么它会不断重置所有视图。我们将不胜感激。

谢谢

【问题讨论】:

  • 你在使用 AutoLayout/ 约束吗?
  • 当您致电self.view.layoutIfNeeded() 时,您更新了aytolayout。对于您的情况,您需要更改约束并在动画块中调用 self.view.layoutIfNeeded()
  • 我没有明确地对控件施加任何限制,但是是的,整个项目都在使用自动布局
  • @iSashok 即使我删除了 self.view.layoutIfNeeded() 它也有相同的行为,因为任何控件都没有任何约束
  • @Mostafa Mohamed Raafat 如果您使用自动布局,编译器默认会为视图添加一些约束。尝试禁用自动布局并更改动画块中的帧

标签: ios swift autolayout


【解决方案1】:

试试这个........

override func viewDidLoad() {
 super.viewDidLoad() 

 NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("makeSpaceForKeyboard:"), name:UIKeyboardWillShowNotification, object: nil);
 NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("makeSpaceForKeyboard:"), name:UIKeyboardWillHideNotification, object: nil);
}

deinit{
 NSNotificationCenter.defaultCenter().removeObserver(self)
}



func makeSpaceForKeyboard(notification: NSNotification) {

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

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

        keyboardIsVisible = true

        UIView.animateWithDuration(duration, animations: { () -> Void in
            var frame = self.view.frame
            frame.size.height = frame.size.height - keyboardHeight
            self.view.frame = frame
        })

    } else if keyboardIsVisible == true && notification.name == UIKeyboardWillShowNotification{

    }else {
        keyboardIsVisible = false

        UIView.animateWithDuration(duration, animations: { () -> Void in
            var frame = self.view.frame
            frame.size.height = frame.size.height + keyboardHeight
            self.view.frame = frame
        })
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2012-10-25
    • 2021-11-01
    • 2017-06-02
    • 1970-01-01
    相关资源
    最近更新 更多