UILabel и UIActivityIndicatorView центрированы в видимой области UITableView - PullRequest
1 голос
/ 20 декабря 2011

Я добавляю UILabel и UIActivityIndicatorView в качестве подпредставления к представлению таблицы в качестве индикатора загрузки. Я хочу, чтобы эти элементы были посередине видимого представления таблицы и оставались в центре, если пользователь прокручивал их, поэтому пользователь всегда будет видеть элементы. Мой код для их создания:

if (!spinner) {
        spinner = [[UIActivityIndicatorView alloc]      initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
        [spinner startAnimating];

        loadingLabel = [[UILabel alloc] initWithFrame:CGRectZero];
        loadingLabel.font = [UIFont systemFontOfSize:20];
        loadingLabel.textColor = [UIColor grayColor];
        loadingLabel.text = @"Loading...";
        [loadingLabel sizeToFit];

        static CGFloat bufferWidth = 8.0;

        CGFloat totalWidth = spinner.frame.size.width + bufferWidth + loadingLabel.frame.size.width;

        CGRect spinnerFrame = spinner.frame;
        spinnerFrame.origin.x = (self.tableView.bounds.size.width - totalWidth) / 2.0;
        spinnerFrame.origin.y = (self.tableView.bounds.size.height - spinnerFrame.size.height) / 2.0;
        spinner.frame = spinnerFrame;
        spinner.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin);
        [self.tableView addSubview:spinner];

        CGRect labelFrame = loadingLabel.frame;
        labelFrame.origin.x = (self.tableView.bounds.size.width - totalWidth) / 2.0 + spinnerFrame.size.width + bufferWidth;
        labelFrame.origin.y = (self.tableView.bounds.size.height - labelFrame.size.height) / 2.0;
        loadingLabel.frame = labelFrame;
        loadingLabel.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin);
        [self.tableView addSubview:loadingLabel];
    }

Как я могу сделать так, чтобы при повторном просмотре таблицы просмотр происходил заново?

EDIT

Как бы я рассчитал размеры, чтобы переместить спиннер в середину? Какое свойство я бы установил?

1 Ответ

2 голосов
/ 20 декабря 2011
  1. Добавьте ваше представление к суперпредставлению табличного представления (если возможно; UITableViewController делает это невозможным)

  2. Добавьте свое представление в табличное представление и измените его положение в методе делегата -scrollViewDidScroll: (UITableViewDelegate - это субпротокол UIScrollViewDelegate)

EDIT

Для поддержания центра обзора

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ 

CGSize adSize = [awView actualAdSize]; 

CGRect newFrame = awView.frame; newFrame.origin.x = (self.view.bounds.size.width - adSize.width)/2; 

newFrame.origin.y = (self.tableView.contentOffset.y - adSize.height/2) -21; 

awView.frame = newFrame; 
}
...