我有一个简单的UITableView
设置,并且页脚视图中只有一个UIActivityIndicatorView
。
在viewDidLoad
我致电:
[_tableView registerNib:[UINib nibWithNibName:@"FetchingResultsFooterView" bundle:nil] forHeaderFooterViewReuseIdentifier:@"TableViewFooterFetchingResultsView"];
然后我为我的页脚添加tableview方法:
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return [self tableViewFooterHeight];
}
-(CGFloat)tableViewFooterHeight
{
return 88;
}
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
static NSString *headerReuseIdentifier = @"TableViewFooterFetchingResultsView";
APFetchingResultsFooter *footer = [tableView dequeueReusableHeaderFooterViewWithIdentifier:headerReuseIdentifier];
[footer setTag:kTableViewFooterTag];
//Centre my activity indicator on screen
CGFloat aiInset = ((_tableViewContainer.frame.size.width /2) - (footer.activityIndicator.frame.size.width /2));
CGFloat aiOffset = _tableViewContainer.contentOffset.x + aiInset;
[footer.activityIndicator setFrame:CGRectMake(aiOffset, ([self tableViewFooterHeight] /2) - (footer.activityIndicator.frame.size.height /2), footer.activityIndicator.frame.size.width, footer.activityIndicator.frame.size.height)];
return footer;
}
这或多或少地按预期显示我的页脚,它与我的活动指示器一起显示。
如果它让你感到困惑,因为我在'UIScrollView'中有一个非常宽的'UITableView',我只是将我的活动指示器放在屏幕上,而不是通过抵消它来查看tableview的中心。
这导致这个代码只是在我滚动时更新活动指示器的位置,因此它保持居中(允许tableview比屏幕宽,以使用页脚)。
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//Synchronise scrolling
if (scrollView == _headerView) [_tableViewContainer setContentOffset:_headerView.contentOffset];
else if (scrollView == _tableViewContainer) [_headerView setContentOffset:_tableViewContainer.contentOffset];
//because the tableview can be wider than the screen, we adjust the footer contents to be centered as we scroll
if (scrollView == _tableViewContainer)
{
APFetchingResultsFooter *footer = (APFetchingResultsFooter *)[_tableView viewWithTag:kTableViewFooterTag];
CGFloat aiInset = ((_tableViewContainer.frame.size.width /2) - (footer.activityIndicator.frame.size.width /2));
CGFloat aiOffset = _tableViewContainer.contentOffset.x + aiInset;
[footer.activityIndicator setFrame:CGRectMake(aiOffset, ([self tableViewFooterHeight] /2) - (footer.activityIndicator.frame.size.height /2), footer.activityIndicator.frame.size.width, footer.activityIndicator.frame.size.height)];
}
}
所以,这一切都非常简单。现在我的问题是:
当我垂直滚动时,当页脚在屏幕外然后再返回到屏幕上时,页脚会被重置。因此活动指标不居中。
我尝试将帧更新代码放在cellForRowAtIndexPath
中哪种方式有效,但是当您在屏幕上滚动页脚时,会有一个延迟,您会看到指示器从其默认帧跳转到新的居中之一。
如何阻止这种情况,以便在屏幕上滚动(或创建页脚)时,在可以看到任何跳跃之前,使用新帧更新指示器视图?
我采取了错误的做法吗?