【问题标题】:IOS Swift 3 UILabels in View don't get rendered correctlyView 中的 IOS Swift 3 UILabel 无法正确呈现
【发布时间】: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
  • 好的,将其添加为答案,以便其他人可以从中受益

标签: ios xcode swift3 uilabel


【解决方案1】:

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

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

【讨论】:

  • 是否应该是async
猜你喜欢
  • 2017-01-25
  • 2017-02-19
  • 2014-03-19
  • 2015-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多