重新加载时阻止透明 UITableView 部分标题闪烁

Posted

技术标签:

【中文标题】重新加载时阻止透明 UITableView 部分标题闪烁【英文标题】:Stop transparent UITableView section header from flashing when reloading 【发布时间】:2014-09-08 18:14:22 【问题描述】:

我遇到了一个奇怪的视觉故障,重新加载我的 UITableView 的一部分导致半透明标题视图 (alpha=0.25) 短暂地闪烁变暗,就好像它在顶部添加了标题视图的另一个副本旧的,然后删除前一个。

我的标题视图本身是动态生成的UIImageView,但是我已将其简化为仅带有backgroundColor[[UIColor blackColor] colorWithAlphaComponent:0.25]UIView,但它仍然存在问题:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
    UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.width, kModPopHeaderHeight)];
    view.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.25];
    view.opaque = NO;
    return view;

如您所见,我将opaque 设置为NO,但这没有任何效果。我还尝试保留在该部分上索引的先前生成的视图的字典,如果它已经创建,则返回现有视图(以测试我的理论,它显示两个视图重叠)但这也令人惊讶地没有效果。无论如何都会闪烁。

请注意,如果我将标题的 alpha 设置为1.0,则不会出现视觉故障,因此它显然与透明度有关。它也不会在每次点击(重新加载)时发生,但大多数情况下。我只是不知道我需要改变什么才能让它正确绘制。任何建议将不胜感激。

【问题讨论】:

【参考方案1】:

好吧,基于我保留现有 headerViews 索引的想法,我实际上设法自己解决了这个问题。我第一次尝试的是拨打[existingView removeFromSuperview],但根本不起作用。

相反,我将其更改为existingView.hidden = YES,然后闪烁神奇地消失了!所以你去。虽然我无法解释为什么这有效而 removeFromSuperview 无效,但如果其他人遇到此问题,请尝试在返回新视图之前隐藏现有视图。

【讨论】:

以上是关于重新加载时阻止透明 UITableView 部分标题闪烁的主要内容,如果未能解决你的问题,请参考以下文章

Jerk当用户位于UITableView的底部时重新加载UITableView

UITableView 重新加载部分时的内容插入更改

每次我重新加载 tableview 部分时 UITableView 都不会向上滚动

重新加载 UITableView 而不重新加载 Section Header

iOS7 UITableview 在重新加载部分/行时很慢

在 UITableView 中重新加载部分