我将UILabel和UIActivityIndicatorView作为子视图添加到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];
}
当桌面视图滚动时,如何让它重新定位?
修改
如何计算将微调器重新定位到中间的尺寸?我会设置什么属性?
答案 0 :(得分:2)
将您的视图添加到表格视图的超级视图中(如果可能; UITableViewController
使这不可能)
将您的视图添加到表格视图中,并在-scrollViewDidScroll:
委托方法中重新定位(UITableViewDelegate
是UIScrollViewDelegate
的子协议)
修改强>:
维持视图中心
-(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;
}