当我这样写时,它按预期工作:
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设置。
这会导致问题吗?
答案 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)}