MBProgressHUD 不显示

MBProgressHUD not show

当我这样写时,它按预期工作:

override func viewDidLoad() {
   super.viewDidLoad()
   MBProgressHUD.showAdded(to: navigationController!.view, animated: true)
}

但是,当我把它放在 DispatchQueue.main 块中时,HUD 不显示:

override func viewDidLoad() {
   super.viewDidLoad()

   DispatchQueue.main.async {
      MBProgressHUD.showAdded(to: self.navigationController!.view, animated: true)
   }
}

我调试了视图层次结构,但存在布局问题:

"Position and size are ambiguous for MBProgressHUD"

navigationController 是 fatherViewController 的 childViewController,容器视图由 fatherViewController 的视图中的自动布局设置。

这是导致问题的原因吗?

我专门为你做了测试,下面的代码对我有用:

override func viewDidLoad() {
   super.viewDidLoad()

   DispatchQueue.main.async {
      MBProgressHUD.showAdded(to: self.navigationController!.view, animated: true)
   }
}

所以问题出在其他地方

实际上 MBProgressHUD 在 UI 主线程上工作,而您正试图在后台线程中调用它。

试试这个:-

 override func viewDidLoad() {
       super.viewDidLoad()
       DispatchQueue.main.async {  start()
 }
}
func start(){


  MBProgressHUD.showAdded(to: self.navigationController!.view, animated: true)}

我已经构建了一个演示来测试它,但它没有发生。所以我重新检查了我的代码,发现我在 DispatchQueue.main.async 中做了一些工作,它阻止了 UI 并导致了问题。

根UI视图几何在viewDidLoad未计算(未调用viewDidLayoutSubviews)。我建议将您的代码放入 viewDidAppear。 此外,不需要在 DispatchAsync.main 中显式调用它,正如其他人提到的那样,它是在 UI 线程中调用的,除非您想从后台线程调用它。