2013-12-20 3 views
4

Я создал UITableViewController в своей раскадровке, а затем перетащил индикатор индикатора активности в контроллер (вместе с созданием розетки для него), с которого я запускаю и останавливаю анимацию до и после загрузки некоторого содержимого json ,Индикатор активности централизации для UITableView

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

Я попытался следующие в попытке центрирования его ... Вот быстрый взгляд на мой viewDidLoad:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.listLoader.center = CGPointMake([UIScreen mainScreen].bounds.size.width/2,[UIScreen mainScreen].bounds.size.height/2); 
    UITableView *appDelegate = (UITableView *)[[UIApplication sharedApplication] delegate]; 
    [appDelegate.window addSubview:self.listLoader]; 

    self.operationQueue = [NSOperationQueue new]; 
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(getPosts) object:nil]; 
    [self.operationQueue addOperation:operation]; 
} 

Пожалуйста, обратите внимание, что оба мои startAnimating и stopAnimating содержатся в моем getPosts метода и выполняются на основной нити. Поэтому, чтобы избежать путаницы, я действительно могу увидеть счетчик, это просто все в области статуса. В самом деле, если я удалить строки ... появляется

self.listLoader.center = CGPointMake([UIScreen mainScreen].bounds.size.width/2,[UIScreen mainScreen].bounds.size.height/2); 
UITableView *appDelegate = (UITableView *)[[UIApplication sharedApplication] delegate]; 
[appDelegate.window addSubview:self.listLoader]; 

Вертушка, прямо под панелью навигации ...

Как именно я центрировать это ??? Я полагал, что метод выше будет работать, но, очевидно, он не работает.

+0

Попробуйте установить центрирующее ядро ​​в viewWillAppear. Посмотрите, работает ли это, у меня часто возникали проблемы с загрузкой элементов по-другому, и я ожидал их загрузки. – Pochi

+0

Пробовал это, но он выглядит так же, как если бы я сохранял центрирование в viewDidLoad. –

ответ

3

Проблема заключается в том, что UITableViewController обрабатывает один tableView, tableViews - это особый вид scrollviews, который изменяется в зависимости от содержимого. Добавление материала в tableviews очень необычно, поэтому вы используете ячейки прототипа, и вы меняете эти ячейки. Нет никакого «неудобного» способа сделать это.

Правильный способ сделать это: иметь обычный ViewController с табличным просмотром и представление с индикатором. THEN делают viewcontroller совместимым с источниками данных и делегируют протоколы для обработки табличного представления.

Если вы все еще хотите использовать tableviewcontroller, это так так менее Hacky метод:

UITableView Activity Indicator the Apple way

+0

Очень информативный ответ. Спасибо. –

1

Наденьте UIView на свой ViewController размер точно так, как вы хотите, чтобы размер UITableView был размером.

Оставьте UITableView на UIView. Измените его правильно.

Теперь перетащите UIActivityIndicator в. Сделать это подвид к UIView, но ниже UITableView в списке представлений (так он обращается за столом). Теперь найдите x/y, который будет центрировать его, и добавьте эти цифры вручную в настройках (на раскадровке).

+0

Я уже делал это в этом методе, но этот метод для меня чрезвычайно «взломан», и я считаю, что должен быть лучший метод для центрирования индикатора активности в UITableViewController, чем делать что-то подобное. –

+0

Хотя я согласен с тем, что это «хакерство», вы можете найти в какой-то момент времени, что вам все равно придется делать «UITableView» так же по другим причинам, которые Apple должна преодолеть для исправления (например, дополнительные пространство в заголовке иногда). – nhgrif

1

Лучший я наткнулась:

// Center 
CGFloat x = UIScreen.mainScreen.applicationFrame.size.width/2; 
CGFloat y = UIScreen.mainScreen.applicationFrame.size.height/2; 
// Offset. If tableView has been scrolled 
CGFloat yOffset = self.tableView.contentOffset.y; 
self.activityView.frame = CGRectMake(x, y + yOffset, 0, 0); 

, как определено в следующем: IOS: ActivityIndicator over UITableView... How to?

Главное, как получить центр видимой в данный момент области прокрутки и над куском кода вы получите именно это, после чего вы можете легко позиционировать окно просмотра прогресса.

Это просто, без взлома.

Смежные вопросы