MBProgressHUD和UITableView

我在填充TableView时显示HUD,但它似乎显示在TableView后面(tableview分隔符打破了HUD)。

在这里输入图像说明

以下是TableViewController中的代码:

- (void)viewDidLoad { [super viewDidLoad]; MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; hud.mode = MBProgressHUDModeText; hud.labelText = @"Loading"; // Populate the table [self getTableData]; self.tableView.rowHeight = 90; } 

这只是与TableViews做这个。

这里的问题是当视图加载的时候你正在添加HUD,这很可能在你的tableView被显示之前,所以tableView被创build并且看起来覆盖了HUD。 将该代码移到viewDidAppear中,问题就会消失:

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; hud.mode = MBProgressHUDModeText; hud.labelText = @"Loading"; } 

如果你想在viewDidLoad实现,使用self.navigationController.view代替self.navigationController.view

包括:

 #import <QuartzCore/QuartzCore.h> 

你可以使用layer.zPosition命令你的对象/视图的可见性。

 MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; hud.mode = MBProgressHUDModeText; hud.labelText = @"Loading"; hud.layer.zPosition = 2; self.tableView.layer.zPosition = 1; 

zPosition值越高,显示的优先级越高。

 Even in ViewDidLoad also we can handle it like this:: - (void)viewDidLoad { [super viewDidLoad]; MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; hud.labelText = @"Loading.."; dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ [self contactsFromAddressBook]; dispatch_async(dispatch_get_main_queue(), ^{ [MBProgressHUD hideHUDForView:self.view animated:YES]; [self.tableView reloadData]; }); }); 

}