7

У меня есть сценарий, где я использую библиотеку третьей стороны MBProgressHUD на UITableViewController но проблемы это всякий раз, когда я прокрутки вверх и вниз по HUD движется со свитком.Как исправить положение MBProgressHUD до центра в UITableView

Я не хочу отключать прокрутку UITableView, а также хочу, чтобы HUD находился в центре UITableView.

Есть ли способ его реализации?

+1

plz пришлите мне код, который вы используете для добавления mbprogressHud в tableview ... – Chandan

+0

Просьба указать код, если у вас есть определенные проблемы.Его достаточно, чтобы отобразить код, как вы добавляете «MBProgressHud» к вашему представлению, поэтому мы знаем, что вы делаете, и мы можем вам помочь;) –

ответ

4

Добавление 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]; 
} 
0

Проблема может, что вы добавляете HUD в tablview, поэтому добавьте в ваш взгляд, как ..

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
    hud.mode = MBProgressHUDModeText; 
    hud.labelText = @"Loading"; 
} 
+0

да Я добавляю HUD в TableViewController, и я не могу изменить реализацию класса , Есть ли способ удерживать HUD в центре таблицы, даже когда я просматриваю вверх и вниз. –

0

Создать объект MBProgressHUD (пример: MBProgressHUD * HUD). Инициализируйте его и добавьте HUD как subview на ваш основной вид и сделайте это

[HUD setCenter:self.view.center]; 
[HUD setUserInteractionEnabled:YES]; 
+0

@ Jasmeent: мой основной вид - TableView, который является производным от ScrollView, всякий раз, когда я добавляю HUD для просмотра таблицы, он прокручивается вверх и вниз с помощью строки таблицы. Я хочу всегда держать его в центре таблицы. –

0

Да, есть возможный способ исправить. До [HUD show:YES], добавьте этот код.

HUD.yOffset = CGRectGetMinY(self.tableView.bounds); 

и все.

Похоже HUD «s view.frame устанавливается как это SuperView-х frame, и, следовательно, он находится на неправильном положении, если вы прокрутите вниз, а затем показать HUD. Добавление строки добавит HUD's yOffset к количеству прокрутки вниз.

+0

Это приведет к тому, что начальная позиция HUD будет находиться в центре экрана после прокрутки. Однако, если вы прокручиваете экран после его появления, он не встает в середине экрана. – Bruce

+0

Да, я использовал его с 'HUD.userInteractionEnabled = NO;'. В противном случае вы должны сбросить свое положение всякий раз, когда прокручивается представление, реализуя '- (void) scrollViewDidScroll: (UIScrollView *) scrollView' – gnuchoi

+0

Получил это, спасибо! Btw теперь я использую альтернативный способ, который должен подключить HUD к супервизору UITableView, таким образом HUD появится в середине без установки yOffset, и пользовательское взаимодействие отключено по умолчанию. – Bruce

0

Это работает для меня. Установите его в parentViewController, затем в View.

let spinningActivity = MBProgressHUD.showHUDAddedTo(self.parentViewController?.view, animated:true) 
0

Я попытался добавить его к контроллеру навигации, как указано выше, и я получил некоторые ошибки при развертывании, когда я перевел его на быстрый. Я нашел this fix, и он работает каждый раз. Кредит Алексею Каут :-).

- (void)showLoadingIndicator 
{ 
    [MBProgressHUD showHUDAddedTo:[UIApplication sharedApplication].keyWindow animated:YES]; 
} 

- (void)hideLoadingIndicator 
{ 
    [MBProgressHUD hideAllHUDsForView:[UIApplication sharedApplication].keyWindow animated:YES]; 
} 
0

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 
    } 
0

Решения прост. При использовании Tableview, просто прикрепите MBProgressHUD к UIApplication.shared.delegate .window

Для быстрой 3.0:

Чтобы показать MBProgressHUD

MBProgressHUD.showAdded(to: ((UIApplication.shared.delegate?.window)!)!, animated: true) 

Чтобы скрыть MBProgressHUD

MBProgressHUD.hide(for: ((UIApplication.shared.delegate?.window)!)!, animated: true) 
Смежные вопросы