MBProgressHUD未显示

时间:2017-06-21 19:08:57

标签: ios dispatch mbprogresshud

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

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"

的位置和大小不明确

navigationController是fatherViewController的childViewController,容器视图由fatherViewController视图中的auto layout设置。

这会导致问题吗?

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

我特别为您执行了测试,以下代码适用于我:

override func viewDidLoad() {
   super.viewDidLoad()

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

所以问题出在其他地方

答案 2 :(得分:2)

viewDidLayoutSubviews点,根UIView几何未计算viewDidLoad未被调用)。我建议您将代码放入viewDidAppear。 此外,不需要在DispatchAsync.main内显式调用它,因为其他提到它是在UI线程中调用的,除非你想从后台线程调用它。

答案 3 :(得分:0)

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

试试这个: -

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


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