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 中创建扩展文件并调用它?