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]; }); });
}