当我这样写时,它按预期工作:
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)}