如何将 MBProgressHUD 的位置固定在 UITableView 的中心
How to fix the position of MBProgressHUD to center in a UITableView
我有一个场景,我在 UITableViewController 上使用第三方库 MBProgressHUD,但问题是每当我上下滚动时,HUD 会随着滚动而移动.
我不想禁用 UITableView 滚动,而且我想将 HUD 保持在 UITableView 的中心。
有没有可能的实现方式?
问题可能是您在 tableview 中添加了 HUD,以添加到您的视图中,例如..
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeText;
hud.labelText = @"Loading";
}
创建MBProgressHUD对象(示例:MBProgressHUD *HUD)。初始化它并在主视图上将 HUD 添加为子视图并执行此操作
[HUD setCenter:self.view.center];
[HUD setUserInteractionEnabled:YES];
是的,有一种可能的修复方法。在 [HUD show:YES]
之前添加此代码。
HUD.yOffset = CGRectGetMinY(self.tableView.bounds);
就是这样。
看起来 HUD
的 view.frame
被设置为超级视图的 frame
,因此如果您向下滚动然后显示 HUD
,它的位置是错误的.添加该行会将 HUD
的 yOffset
添加到向下滚动量。
将 HUD 添加到 tableview 的超级视图或 navigationController.view
修复了问题:
UIView *view = self.tableView.superview;
// UIView *view = self.navigationController.view; if you are using navigationController
if (view != nil) {
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES];
}
这对我有用。将其设置为parentViewController,然后是View。
let spinningActivity = MBProgressHUD.showHUDAddedTo(self.parentViewController?.view, animated:true)
我尝试按照上面的说明将它添加到导航控制器,但在将它转换为 swift 时出现了一些解包错误。我发现 this fix 并且每次都有效。感谢 Aleksei Kaut :-).
- (void)showLoadingIndicator
{
[MBProgressHUD showHUDAddedTo:[UIApplication sharedApplication].keyWindow animated:YES];
}
- (void)hideLoadingIndicator
{
[MBProgressHUD hideAllHUDsForView:[UIApplication sharedApplication].keyWindow animated:YES];
}
Swift 3.0
override func viewDidLoad() {
super.viewDidLoad()
progress = MBProgressHUD(view: view) // <<-- That's the trick
view.addSubview(progress!)
view.bringSubview(toFront: progress!)
progress?.show(animated: true)
progress?.mode = .indeterminate
progress?.animationType = .fade
}
解决方法很简单。当您使用 tableView 时,只需将 MBProgressHUD 附加到 UIApplication.shared.delegate?.window
对于 swift 3.0 :
显示 MBProgressHUD
MBProgressHUD.showAdded(to: ((UIApplication.shared.delegate?.window)!)!, animated: true)
隐藏 MBProgressHUD
MBProgressHUD.hide(for: ((UIApplication.shared.delegate?.window)!)!, animated: true)
我有一个场景,我在 UITableViewController 上使用第三方库 MBProgressHUD,但问题是每当我上下滚动时,HUD 会随着滚动而移动.
我不想禁用 UITableView 滚动,而且我想将 HUD 保持在 UITableView 的中心。
有没有可能的实现方式?
问题可能是您在 tableview 中添加了 HUD,以添加到您的视图中,例如..
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeText;
hud.labelText = @"Loading";
}
创建MBProgressHUD对象(示例:MBProgressHUD *HUD)。初始化它并在主视图上将 HUD 添加为子视图并执行此操作
[HUD setCenter:self.view.center];
[HUD setUserInteractionEnabled:YES];
是的,有一种可能的修复方法。在 [HUD show:YES]
之前添加此代码。
HUD.yOffset = CGRectGetMinY(self.tableView.bounds);
就是这样。
看起来 HUD
的 view.frame
被设置为超级视图的 frame
,因此如果您向下滚动然后显示 HUD
,它的位置是错误的.添加该行会将 HUD
的 yOffset
添加到向下滚动量。
将 HUD 添加到 tableview 的超级视图或 navigationController.view
修复了问题:
UIView *view = self.tableView.superview;
// UIView *view = self.navigationController.view; if you are using navigationController
if (view != nil) {
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES];
}
这对我有用。将其设置为parentViewController,然后是View。
let spinningActivity = MBProgressHUD.showHUDAddedTo(self.parentViewController?.view, animated:true)
我尝试按照上面的说明将它添加到导航控制器,但在将它转换为 swift 时出现了一些解包错误。我发现 this fix 并且每次都有效。感谢 Aleksei Kaut :-).
- (void)showLoadingIndicator
{
[MBProgressHUD showHUDAddedTo:[UIApplication sharedApplication].keyWindow animated:YES];
}
- (void)hideLoadingIndicator
{
[MBProgressHUD hideAllHUDsForView:[UIApplication sharedApplication].keyWindow animated:YES];
}
Swift 3.0
override func viewDidLoad() {
super.viewDidLoad()
progress = MBProgressHUD(view: view) // <<-- That's the trick
view.addSubview(progress!)
view.bringSubview(toFront: progress!)
progress?.show(animated: true)
progress?.mode = .indeterminate
progress?.animationType = .fade
}
解决方法很简单。当您使用 tableView 时,只需将 MBProgressHUD 附加到 UIApplication.shared.delegate?.window
对于 swift 3.0 :
显示 MBProgressHUD
MBProgressHUD.showAdded(to: ((UIApplication.shared.delegate?.window)!)!, animated: true)
隐藏 MBProgressHUD
MBProgressHUD.hide(for: ((UIApplication.shared.delegate?.window)!)!, animated: true)