【发布时间】:2017-10-05 14:14:55
【问题描述】:
我有一个 UITableView 配置为普通样式,因此我可以将标题视图卡在表格顶部,直到另一个标题将其拉走。
问题是:如果我有一个标题卡在屏幕顶部,并且我以编程方式滚动到表格的另一部分(该标题根本不应该出现的地方),那么 UIView 将不会被关闭。 IE。如果我再次滚动到表格的该部分,该标题的幽灵将在表格的该部分可见。
我已经实现了- (void)tableView:(UITableView *)tableView didEndDisplayingHeaderView:(nonnull UIView *)view forSection:(NSInteger)section 方法来了解正在发生的事情。我发现如果我手动滚动直到一个标题被拉离屏幕,这个委托就会被调用。但如果我以编程方式滚动,则不会调用委托。
顺便说一句,我尝试使用两种不同的方法以编程方式滚动,问题是一样的。
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;
- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;
我可以想象的一种解决方法是实现- (void)scrollViewDidScroll:(UIScrollView *)scrollView;,过滤可见屏幕之外的所有标题视图,并将它们从超级视图中删除。我可能可以让它工作,但我想知道是否有其他更好的解决方案。
[编辑] 如果我用动画 = YES 调用 - (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;,则该错误不会发生。我可以使用这个解决方案,但在某些情况下我真的希望在没有动画的情况下滚动。
【问题讨论】:
-
如果将表格视图设置为分组非普通,是否会出现问题?
-
不,我刚刚测试过。当标题超出其“自然”位置(卡在表格顶部)时会出现问题,这不会在分组样式中发生。
-
stackoverflow.com/questions/5466097/… 这可能会为您指明正确的方向
-
我不这么认为。我没有在我的实现中使用 contentInset。
-
天哪,正如我所说,我使用
[_conversationTableView setContentOffset:newOffset animated:mustAnimate];自动滚动表格。而且我刚刚意识到,如果动画是 YES,则错误不会发生!我将编辑问题以提及这一点。但此时,我只能认为是iOS的bug。
标签: ios objective-c uitableview