【发布时间】:2020-02-11 01:19:47
【问题描述】:
我已经正常设置了视图的前导、尾随约束。我已将其高度设置为静态 325。对于底部约束,我设置了 2 个约束 1. 主视图的底部约束到视图的底部约束。 2.主视图的底部约束到视图的顶部约束。现在,在用户的操作中,我只显示带有动画的隐藏视图。因此,当视图显示在屏幕上并且应用程序进入后台时,视图的约束会自动更改并且视图会被隐藏。此问题仅在 iOS 13 设备中出现。
我尝试更新其对 viewWillAppear() 的约束,但在 iOS 13 中,当应用从后台激活时,也不会调用 ViewControllers 的 viewWillAppear。我也不认为这是更新约束的好主意。
class ViewController: UIViewController {
@IBOutlet weak var topConstraint: NSLayoutConstraint!
@IBOutlet weak var bottomConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
self.topConstraint.isActive = false
self.bottomConstraint.isActive = true
UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded()
}
}
}
}
我不希望在应用状态从前台更改为后台时更改或更新我的约束,反之亦然。
请帮帮我。
TIA
【问题讨论】:
-
您将约束与明确的框架设置混合在一起,这通常会导致问题。不太清楚你想要什么......当你的视图加载时,你想将
contentView定位在底部下方(所以它是“屏幕外”),然后你想动画它向上移动到视图中......然后,应用程序转到后台,并且您希望在应用程序返回前台时仍显示视图?没有新动画? -
是的。我只想这样。实际上,我在 viewWillAppear() 中编写的代码是在用户操作时执行的。但出于解释的目的,我创建了一个演示。
-
假设您的动画位置/大小仅在约束条件下正常工作(没有明确的
.frame = ...语句),那么您的代码应该可以正常工作。ViewDidLoad()应该不在应用程序从后台转换到前台时调用,除非您在该事件上运行了一些其他代码。
标签: ios swift iphone ios13 swift5