2017-06-21 149 views
4

當我寫這樣的,它按預期工作:MBProgressHUD不顯示

​​

然而,當我把它放在DispatchQueue.main塊,平視顯示器不顯示:

override func viewDidLoad() { 
    super.viewDidLoad() 

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

我調試視圖層次,並且有一個佈局問題:

「位置和大小曖昧MBProgressHUD」

navigationController是fatherViewController的childViewController,而容器視圖是在fatherViewController的視圖中通過自動佈局設置的。

這是否導致問題?

+0

你可以寫'self.view',而不是'self.navigationController!.view' 或 你有你'UINavigationCotroller'在故事板添加如果你有比讓它作爲initialViewController連接爲RootViewControlller比高於嘗試添加' self.navigationController!.view' – Dhiru

回答

3

我建立了一個演示,測試它,但它並沒有發生。因此,我重新檢查了我的代碼,發現我在DispatchQueue.main.async中放置了一些工作,這會阻止UI並導致問題。

2

我進行測試特別爲您和下面的代碼對我的作品:

override func viewDidLoad() { 
    super.viewDidLoad() 

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

,所以這個問題在別處位於

+0

我已經更新了這個問題。 navigationController是一個childViewController,它的容器視圖是通過自動佈局設置的。我想也許這會導致這個問題。 –

0

其實MBProgressHUD工作在UI主線程和您要叫它後臺線程。

試試這個: -

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


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

他正在調度它到主線程而不是背景。 –

1

根UIView幾何是沒有計算viewDidLayoutSubviews未被調用)在viewDidLoad點。我建議把你的代碼放入viewDidAppear。 另外,不需要在DispatchAsync.main裏顯式調用它,就像其他人提到的那樣,它在UI線程中被調用,除非你想從後臺線程調用它。