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)
   }
}

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

"MBProgressHUD的位置和大小是模棱两可的">

导航控制器是父视图控制器

的子视图控制器,容器视图由父视图控制器视图中的自动布局设置。

这是导致问题的原因吗?

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

我专门为您进行了测试,以下代码对我有用:

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

所以问题出在其他地方

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

实际上MBProgressHUD适用于UI主线程,您正在尝试在后台线程中调用它。

试试这个:-

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

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

最新更新