Swift:当应用程序最小化时视图位置重置,然后回到前台

Posted

技术标签:

【中文标题】Swift:当应用程序最小化时视图位置重置,然后回到前台【英文标题】:Swift: View position resets when app is minimized, then brough back to foreground 【发布时间】:2021-06-19 04:45:43 【问题描述】:

我有一个 UIView,它从随机位置开始(通过情节提要设置),然后在调用 viewDidLoad() 时找到它的实际位置,具体取决于存储在 UserDefaults 中的用户首选项。

问题是当应用程序被最小化,然后回到前台时,该 UIView 的位置会重置为初始随机位置。 我怎样才能阻止应用程序释放在运行时确定的位置?还是我需要通过应用从非活动状态恢复时触发的函数重新计算该位置?

我认为为此包含代码没有多大用处,但 UIView 的位置(名为“contextUnderscoreLine”)在viewDidLoad()contextUnderscoreLine.center = savedCGPoint 中设置。

【问题讨论】:

【参考方案1】:

我想我找到了解决方案,以防其他人遇到同样的问题:

viewDidLoad() 中添加一个观察者来检测应用程序何时处于“活动”状态。从文档中,我的理解是,这将在应用程序启动时调用一次,然后每次应用程序从后台返回时调用。所以有问题的 UIView 的初始格式化可以在那里完成,而不是在viewDidLoad()

override func viewDidLoad() 
    super.viewDidLoad()

    NotificationCenter.default.addObserver(self, selector: #selector(applicationDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)


@objc func applicationDidBecomeActive(notification: NSNotification) 
    // Application is back in the foreground

    //determine the position of the UIView here, instead of in viewDidLoad()

编辑

对于我的具体情况,最好使用UIApplication.willEnterForegroundNotification 而不是UIApplication.didBecomeActiveNotification。这样,UIView 中的更改在应用程序返回前台之前完成,因此您可以避免在用户面前进行更改时出现明显的 UIView 抖动。

【讨论】:

以上是关于Swift:当应用程序最小化时视图位置重置,然后回到前台的主要内容,如果未能解决你的问题,请参考以下文章

将 UIViewController 子视图重置回初始位置

使用 Swift 使用键盘移动视图

出现视图时执行函数 - Swift

NavController 中的滚动视图在显示键盘后不会重置(Swift)

Swift ios 重置视图控制器层次结构

iOS/Swift:保持“全局”视图平移不重置其他对象的位置,开启自动布局?