gpt4 book ai didi

ios - 使用键盘动画调整约束大小

转载 作者:行者123 更新时间:2023-11-28 06:29:05 24 4
gpt4 key购买 nike

我正在尝试为我的 UIStackView 设置动画,它在键盘出现时包含一个登录表单。我只想通过调整 Storyboard 文件中的约束来做到这一点。

这是我的布局:

Layout

我的代码根据键盘的大小调整底部约束的大小。

@IBOutlet var keyboardHeightLayoutConstraint: NSLayoutConstraint!

override func viewDidLoad() {
super.viewDidLoad()

NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardNotification(notification:)), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil)

keyboardHeightLayoutConstraint.isActive = false
}

func keyboardNotification(notification: NSNotification) {
keyboardHeightLayoutConstraint.isActive = true
if let userInfo = notification.userInfo {
let endFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
let duration:TimeInterval = (userInfo[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0
let animationCurveRawNSN = userInfo[UIKeyboardAnimationCurveUserInfoKey] as? NSNumber
let animationCurveRaw = animationCurveRawNSN?.uintValue ?? UIViewAnimationOptions.curveEaseInOut.rawValue
let animationCurve:UIViewAnimationOptions = UIViewAnimationOptions(rawValue: animationCurveRaw)

if (endFrame?.origin.y)! >= UIScreen.main.bounds.size.height {
self.keyboardHeightLayoutConstraint?.constant = 0.0
} else {
self.keyboardHeightLayoutConstraint?.constant = (endFrame?.size.height)! + 20
}
UIView.animate(withDuration: duration,
delay: TimeInterval(0),
options: animationCurve,
animations: { self.view.layoutIfNeeded() },
completion: nil)
}
}

结果是它只会缩小 UIStackView 的大小,因为顶部约束不允许它向上移动,例如:

Result

这与我的堆栈 View 的顶部约束有关。删除此约束可以解决问题,但在较小的分辨率下,表单可能会与 UIImageView 重叠。有没有办法更新这个约束以反射(reflect)底部约束的变化?

最佳答案

您可以为顶部和底部约束设置导出并更改它们。我已经做过很多次了。

我不太清楚你的约束布局,但我猜你想添加到底部布局的约束并从顶部布局约束减去 .

关于ios - 使用键盘动画调整约束大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40921659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com