MBProgressHUD выбил кусок из середины?

Я изучаю некоторый код, написанный кем-то другим, как часть новой работы, для которой я был нанят. Одна из ошибок, с которыми я сталкиваюсь, заключается в том, что на определенных страницах, когда MBProgressHUD отображается для "Вход в систему" ​​или "Подключение", он получает кусок из середины. Например:

введите описание изображения здесь

Очевидно, что я ищу что-то вроде этого:

введите описание изображения здесь

Кажется, что это происходит только тогда, когда приложение возвращается из фона (то есть, когда приложение загружается впервые, когда мы также используем MBProgressHUD но работает отлично) и только на определенных страницах. Коробка загружается правильно, и примерно через пол оборота индикатора активности появляется эта дыра. Затем он остается таким, пока коробка не исчезнет.

Я бы добавил немного кода, чтобы посмотреть, но, если честно, я не знаю, с чего начать. Я не могу придумать ничего такого, что могло бы выкинуть кусок посередине таким образом, и, как вы можете видеть из прозрачности второго изображения, за индикатором активности, похоже, нет прямоугольника такой формы / размера. это может быть случайно зеленеть.

Я никогда не использовал MBProgressHUD я раньше, и я никогда не сталкивался с графической ошибкой такого рода. Кто-нибудь знает, что происходит или терпит неудачу, может ли кто-нибудь подсказать мне, что может быть причиной такого поведения?

РЕДАКТИРОВАТЬ:

Ниже приведен код, используемый для добавления индикатора активности в HUD (изнутри MBProgressHUD объект):

// Update to indeterminate indicator
[self.indicator removeFromSuperview];
self.indicator = nil;
if (IOSVersion >= 8.0 && (DeviceScreenSize().height >= 1136.0 || DeviceScreenSize().width >= 1136.0)) {
    self.indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
} else {
    self.indicator = MB_AUTORELEASE([[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]);
}
[(UIActivityIndicatorView *)indicator startAnimating];
[self addSubview:indicator];

Это часть большего updateIndicators метод, но есть существенные моменты: индикатор удаляется (если раньше был другой), затем он добавляется и анимируется. Закомментируйте любой из startAnimating или же addSubview линии, и HUD появляется без индикатора активности, но проблема никогда не возникает.

Для меня это звучит так, будто анимация индикатора активности каким-то образом вызывает недостающую часть базового представления. Но с чего бы это? Кто-нибудь слышал о таких вещах раньше?

РЕДАКТИРОВАТЬ 2:

Насколько я могу судить, проблема возникает только на одном ViewController во всем приложении, и все же этот ViewController никогда не ссылается MBProgressHUD или Индикаторы активности любого вида. И все эти функции находятся в методе AppDelegate applicationDidBecomeActive:, как показано ниже:

MBProgressHUD* hud = [[MBProgressHUD alloc] initWithWindow:self.window];
[self.window addSubview:hud];
hud.labelText = LocalizedString(@"Logging in...");
[hud showAnimated:YES whileExecutingBlock:^{
        User* U = self.SelectedUser;
        if (!isEmpty(U)) {
            if ([U networkLogin]) {
                [self setSelectedUser:U];
                if ([U Disabled] != disabledTypesNone) {
                    [Flurry logEvent:@"Login Failed" withParameters:@{@"Name": U.DisplayName,
                                                                      @"DeviceID": [@([Device sharedDevice].DeviceID) stringValue],
                                                                      @"Disabled": [@([U Disabled]) stringValue]}];

                    ret = NO;
                } else {
                    [Flurry logEvent:@"Login" withParameters:@{@"Name": U.DisplayName,
                                                               @"DeviceID": [@([Device sharedDevice].DeviceID) stringValue]}];
                    [Flurry setUserID:[NSString stringWithFormat:@"%@ - %@", U.EmpID, U.DisplayName]];
                }
            } else {
                ret = NO;
            }
        }
} completionBlock:^{
    [hud removeFromSuperview];
    if (!ret) {
        [[NSNotificationCenter defaultCenter] postNotificationName:kDisplayLogin object:nil];
    } else {
        [[NSNotificationCenter defaultCenter] postNotificationName:kLoggedIn object:nil];
    }
}];

Поскольку это происходит в AppDelegate, оно должно быть одинаковым во всем приложении, верно? И все же, когда тот же код вызывается (из AppDelegate, как и прежде), когда приложение находится в другом ViewController, оно работает без проблем.

Что может отличать поведение этого метода в разных ViewControllers?

0 ответов

Другие вопросы по тегам