View 中的 IOS Swift 3 UILabel 无法正确呈现

Posted

技术标签:

【中文标题】View 中的 IOS Swift 3 UILabel 无法正确呈现【英文标题】:IOS Swift 3 UILabels in View don't get rendered correctly 【发布时间】:2017-10-25 13:02:29 【问题描述】:

开始一些关于我的设置的信息:我有一个带有 3 个视图和 3 个视图控制器的故事板,每个视图都附加一个。

我正在使用 self.performSegue(withIdentifier: "bookingSuccess", sender: nil) 从 DataTask(http 请求)的完成处理程序中切换视图。为了能够传递一些数据,我使用了准备函数,我将 ViewModel 分配给目标控制器。

之后,我在 ViewDidLoad() 函数中准备了一些 UI 内容,并在 ViewWillAppear() 方法中为我的标签分配值。

这很好用,但是当视图切换时,一半的 UI 元素不显示,并且按钮文本也不存在。在某些情况下,我不知道(大多数情况下,只需等待几秒钟或在不关闭应用程序的情况下重新打开,这些元素就会突然出现。 我尝试了很多不同的东西,但没有任何效果。有时会在开头显示一个标签,但我不知道为什么它不显示。我的 ios 目标版本是 IOS 10 或 IOS 11.0.1/3

这是两个屏幕图像: Directly after switching the View

After waiting about 10 seconds

【问题讨论】:

确保在主线程上调用了self.performSegue(withIdentifier: "bookingSuccess", sender: nil),这听起来像是在后台线程上做 UI 工作 您好,感谢您的快速回答,我尝试使用 DispatchQueue.main.sync self.performSegue(withIdentifier: "bookingSuccess", sender: nil) 但它不起作用 async 而不是sync 工作正常,非常感谢!!!疯狂的@Ladislav 好的,将其添加为答案,以便其他人可以从中受益 【参考方案1】:

这听起来像是在后台线程上进行 UI 工作的问题。由于您从 DataTask 的完成处理程序中调用 self.performSegue(withIdentifier: "bookingSuccess", sender: nil) 并且这将在后台线程上,所以这样做:

DispatchQueue.main.async 
    self.performSegue(withIdentifier: "bookingSuccess", sender: nil)

【讨论】:

是否应该是async

以上是关于View 中的 IOS Swift 3 UILabel 无法正确呈现的主要内容,如果未能解决你的问题,请参考以下文章

iOS View 中的 MVC 设计与模型对话 - Swift - 以编程方式

Google Sign In 调用 App Delegate 中的方法后关闭 View Controller (iOS / Swift)

如何在 iOS Swift 3 的 View Controller 中创建扩展文件并调用它?

如何在 iOS Swift 中显示库中的实时照片视频并在 Collection-View 中显示?

iOS Swift 给动画添加点击事件

推送通知点击获取 url 并在 View Controller , iOS , Swift4.2 中显示