我有一个 UITableView 配置为普通样式,因此我可以将标题 View 卡在表格顶部,直到另一个标题将其拉走。
问题是:如果我有一个标题卡在屏幕顶部,并且我以编程方式滚动到表格的另一部分(该标题根本不应该出现的地方),那么 UIView 将不会被关闭。 IE。如果我再次滚动到表格的该部分,该标题的幽灵将在表格的该部分可见。
我已经实现了方法 - (void)tableViewUITableView *)tableView didEndDisplayingHeaderViewnonnull UIView *)view forSectionNSInteger)section 来了解发生了什么。我发现如果我手动滚动直到一个标题被拉离屏幕,这个委托(delegate)就会被调用。但如果我以编程方式滚动,则不会调用委托(delegate)。
顺便说一句,我尝试使用两种不同的方法以编程方式滚动,问题是一样的。
- (void)setContentOffsetCGPoint)contentOffset animatedBOOL)animated;
- (void)scrollToRowAtIndexPathNSIndexPath *)indexPath atScrollPositionUITableViewScrollPosition)scrollPosition animatedBOOL)animated;
我可以想象的一种解决方法是实现 - (void)scrollViewDidScrollUIScrollView *)scrollView; ,过滤可见屏幕之外的所有标题 View ,并将它们从 super View 中删除。我可能可以让它工作,但我想知道是否有其他更好的解决方案。
[EDIT] 如果我调用 - (void)setContentOffsetCGPoint)contentOffset animated:(BOOL)animated; 且动画 = YES,则该错误不会发生。我可以使用这个解决方案,但在某些情况下我真的希望在没有动画的情况下滚动。
Best Answer-推荐答案 strong>
不完全确定我完全理解您的问题,但是一旦您以编程方式滚动离开该区域/部分并且 < strong>然后返回。
我不确定您如何填充标题 View 内容,但我有 几个 应用程序运行 UITableView 的多个部分标题需要更新滚动/内容偏移量没有问题,只要你用这个委托(delegate)“绘制”你的标题:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
// Per section, simply return the appropriate header view
...
NSString *someIdentifier = [NSString stringWithFormat"sectionHeaderView:<some #, letter, or tag>", <SOMETHING UNIQUE ADD HERE>];
UITableViewHeaderFooterView *myHeaderView = [self.tableView dequeueReusableHeaderFooterViewWithIdentifier:someIdentifier];
if (!myHeaderView) {
// No header view found with that ID. Make a new one
}
...
return myHeaderViewForSection;
}
这样,无论您是手指滚动还是以编程方式设置您喜欢的内容偏移量,您的表格 View 都将知道要绘制什么、何时绘制以及放置在何处。
使用他们的代表有点麻烦,因为一开始有点乏味,但使用 viewForHeaderInSection 证明是我获得我(你)想要的结果的唯一方法。
希望这会有所帮助 - 编码愉快!
关于ios - UiTableView 标题没有消失,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/46587878/
|