如何使用UIKit在Swift 5中立即强制更新我的UI?

问题描述 投票:0回答:1

我的UI出现问题,无法立即更新。

我先打someCustomView.isHidden = false。之后,我创建一个新的View Controller的新实例。在新的VC viewDidLoad()中,我正在加载“新的机器学习模型”,这需要一些时间。

private func someFuncThatGetsCalled() {

    print("1")

    self.viewLoading.isHidden = false

    print("2")

    performSegue(withIdentifier: "goToModelVCSegue", sender: nil)

}

当我按下调用此功能的按钮时,控制台上将打印“ 1”和“ 2”。但是,在我的新VC的viewDidLoad()完成之前,该视图不可见。

是否有可能立即强制更新UIViewsetNeedsDisplay()对我不起作用。

感谢您的帮助!

ios swift uiview uikit
1个回答
2
投票

使用layoutIfNeeded() Apple Docs

layoutIfNeeded()

如果布局更新有待解决,请立即布置子视图。使用此方法可以强制视图立即更新其布局。使用自动版式时,版式引擎会根据需要更新视图的位置,以满足约束的更改。使用接收消息的视图作为根视图,此方法从根开始布置视图子树。如果没有任何布局更新待处理,则此方法将退出,而不修改布局或调用任何与布局相关的回调。

因此,根据经验,

layoutifneeded:立即(当前更新周期)

setNeedsLayout:放松(等待下一个更新周期)

使用方法

yourView.layoutIfNeeded()

您还可以参考该图以更好地记住这些遍的顺序

enter image description here

来源Apple docs on layoutIfNeeded

图像信用Medium artcle

© www.soinside.com 2019 - 2024. All rights reserved.