【问题标题】:Update center Y and center X constraints in a UIView更新 UIView 中的中心 Y 和中心 X 约束
【发布时间】:2017-12-03 16:56:54
【问题描述】:

我创建了一个 UIVIew 并将其添加到中心 X 和 Y;

如果键盘出现,键盘将与视图重叠。

如何更新约束并确保视图始终位于中心:

@IBOutlet weak var addViewConstraintX: NSLayoutConstraint!
@IBOutlet weak var addViewConstraintY: NSLayoutConstraint!
@IBOutlet weak var addView: UIView!
@IBOutlet weak var english: UITextField!
@IBOutlet weak var chinese: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
    addView.layer.cornerRadius = 10.0;
    addView.layer.masksToBounds = true;
    NotificationCenter.default.addObserver(self, selector: #selector(FirstViewController.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
}

@objc func keyboardWillShow(_ notification:Notification) {
    print("keyboardWillShow")
}

【问题讨论】:

  • centerY = (screen.height - keyboard.height) / 2.0,我认为这是一个初等数学。

标签: swift uiview constraints


【解决方案1】:

您需要收听一个不同的通知:UIKeyboardWillChangeFrame

当您收到通知时,通知的 userInfo 字典将包含键盘的新尺寸。

https://developer.apple.com/documentation/uikit/uiwindow/keyboard_notification_user_info_keys

然后只需将垂直布局约束的常量更改为键盘高度的一半即可。

【讨论】:

  • 对于 OP,请注意,如果 superview 确实发生了变化,你可能会很好。 (这可能包含在您的答案中作为解释。实际问题不是检测到键盘......但底层框架没有改变。)
【解决方案2】:

在您的viewDidLoad 方法中

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)

其他地方

func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        let keyboardHeight = keyboardSize.height
        addView.center = CGPoint(x: self.view.center.x, y: self.view.center.y - keyboardHeight/2)
    }
}

【讨论】:

  • 当我点击“中文”UITextField时,“addVIew”会回到原来的位置
猜你喜欢
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 2022-01-05
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
相关资源
最近更新 更多