iOS Swift - 多个 UITextField 移动 UIView

标签 ios swift uiview uitextfield

首先我将描述布局: 我有一个带有两个 UITextfields 的 UIView。当我选择任一文本字段时,我希望 UIView 向上移动,以便文本字段不会被键盘覆盖。正常的解决方案是显而易见的并且已经实现:keyboardWillHidekeyboardWillShow。当我选择一个文本字段时,UIView 的行为符合预期,但是,当我选择一个文本字段,然后选择下一个文本字段时,UIVIEW 会弹回到原始约束,并且不会重新调整,即使 keyboardWillShow 是又打电话了。

我怎样才能达到预期的效果:当选择一个文本字段时,UIView 向上移动,然后当选择下一个文本字段时,UIView 保持在完全相同的凸起位置。

为什么 UIView 在当前选择的第二个文本字段上重置?

下面是相关代码,这些函数都是在VDL中设置的。没有其他代码触及文本字段。值得一提的是,这些文本字段出现在当前上下文的模态视图中。另外值得一提的是,键盘的类型为 decimalPad

// MARK: - keyboard Controls

func keyboardWillShow(notification:NSNotification) {
    print("Keyboard show")
    if isKeyboardOffset == false {
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
            print("Keyboard show... \(keyboardSize)")

            self.viewToMove.frame.origin.y -= keyboardSize.height / 2

        }
        isKeyboardOffset = true
    }
}



func keyboardWillHide(notification:NSNotification) {
    print("Keyboard hide")
    if isKeyboardOffset == true {
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
            print("keyboard hide...")

            self.viewToMove.frame.origin.y += keyboardSize.height / 2

        }
        isKeyboardOffset = false
    }
}

编辑答案: 正如已接受的答案中所述,我们选择更新指示 UIView 位置的布局约束,而不是调整 UIView 的位置。以下是 keyboardWillShow

的实现
func keyboardWillShow(notification:NSNotification) {
    if isKeyboardOffset == false {
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
            print("Keyboard show... \(keyboardSize)")
            self.topConstraint.constant -= 100

        }
        isKeyboardOffset = true
    }
}

最佳答案

由于您使用的自动布局对 View 有限制,因此它会自动重置回原始位置。因此,如果您更改约束的值,这应该可以工作,而不是更改 View 位置。

关于iOS Swift - 多个 UITextField 移动 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43949682/

相关文章:

ios - 强制使用参数名称,但只是其中的一部分

ios - 使 UIView 仅对某些 View 透明

ios - awakeFromNib 中的变量为 nil

ios - Locationmanager didchangeauthorizationstatus 未在后台调用

ios - Xcode 4.2 不为通用应用程序创建单独的 iPhone、iPad、共享文件夹

ios - Xcode更新后多个库和包含文件出错

ios - 如何在 Swift 3 的 UIView 上添加右边框?

ios - 在 iOS 中与复杂的图形交互

ios - 如何从 Objective-C 调用 swift 泛型函数

objective-c - AppKit 中这个组件的名称是什么?