gpt4 book ai didi

ios - 在新的 xcode 中,layoutSubviews 未被调用

转载 作者:行者123 更新时间:2023-11-29 00:09:48 25 4
gpt4 key购买 nike

我有动画 View (更改约束)的代码

UIView .animate(withDuration: TimeInterval(duration), delay: 0.0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseInOut, animations: {

self.topConstraint!.constant = self.yPositioOfOpenPanel
self.superview?.layoutIfNeeded()

}

奇怪的是,在 iPhone X 上 layoutSubviews 被调用,但在其他模拟器和真实设备上却没有。 (而且我认为应该如此)

同样的行为是当我手动更改约束时

if let constraint = topConstraint {
constraint.constant = self.superview!.frame.height - recogniser.location(in: self.superview).y + yPositionOfBeginTouchInPanel
}

编辑:

按照建议,我正在添加一些新信息。

动画效果很好,一切都在按应有的方式进行动画处理。

问题是我想在动画就位时触发一些新事件。 (我会使用 topConstraint.constant 来计算一些东西,而动画就位,或者当我手动更改 topConstraint 时)这就是为什么我想在方法 layoutSubviews 上设置一些触发器。当动画更改 subview 时应触发此方法。

我认为这在 iOS 11 之前有效(但我不能 100% 确定,因为这个功能在我的程序中是新的,但我记得我在其他程序中使用过它并且它有效)。它仍然适用于 iPhone X(模拟器),但不适用于其他模拟器或真实设备(显然真正的 iPhone X 还没有出来)。

最佳答案

我认为你应该稍微改变一下动画代码:

// update constraints before you call animate
self.topConstraint!.constant = self.yPositioOfOpenPanel
// tell superview that the layout will need to be updated
self.superview?.setNeedsLayout()

UIView.animate(withDuration: TimeInterval(duration), delay: 0.0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseInOut, animations: {
// here you tell it to update the layout according to new constraints
self.superview?.layoutIfNeeded()
}

关于ios - 在新的 xcode 中,layoutSubviews 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46826208/

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