UILabel和UIActivityIndi​​catorView位于UITableView的可见区域

时间:2011-12-19 21:10:17

标签: ios uitableview uilabel uiactivityindicatorview

我将UILabel和UIActivityIndi​​catorView作为子视图添加到tableview作为加载指示器。我希望这些项目位于表格视图的可见区域中间,并且如果用户滚动则保留在中心,这样用户将始终看到项目。我创建它们的代码是:

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

当桌面视图滚动时,如何让它重新定位?

修改

如何计算将微调器重新定位到中间的尺寸?我会设置什么属性?

1 个答案:

答案 0 :(得分:2)

  1. 将您的视图添加到表格视图的超级视图中(如果可能; UITableViewController使这不可能)

  2. 将您的视图添加到表格视图中,并在-scrollViewDidScroll:委托方法中重新定位(UITableViewDelegateUIScrollViewDelegate的子协议)

  3. 修改

    维持视图中心

    -(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; 
    }