滚动时 viewForHeaderInSection 消失

Posted

技术标签:

【中文标题】滚动时 viewForHeaderInSection 消失【英文标题】:viewForHeaderInSection disappears when scrolling 【发布时间】:2010-04-24 21:22:34 【问题描述】:

我在 UITableView 中使用了自定义标题视图,但是一旦我开始向下滚动标题就会消失,而不是像默认标题那样保持原位。它也没有滚出屏幕,只是完全消失了。 viewForHeaderInSection 仍在被调用,但我的自定义标题视图的 drawRect 方法不是。我究竟做错了什么?这是一些代码...

我的 UITableView 数据源...

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
   
    HeaderView* headerView = [[[HeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 40.0f)] autorelease];
    return headerView;

...还有我的自定义标题...

-(void)drawRect:(CGRect)rect

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 115.0f, 125.0f, 133.0f, 0.5f);
    CGContextFillRect(context, CGRectMake(0.0f, 0.0f, 320.0f, 40.0f));

【问题讨论】:

我找到了一个解决方案,我将自定义标题视图添加为基本 UIVIew 的子视图(我从 viewForHeaderInSection 返回),它很有魅力。我的视图(UIVIew 的子类)不起作用,这似乎有点愚蠢。哦,好吧。 奇怪,但确实可以解决问题。 【参考方案1】:

我过去曾遇到过这个问题,为了避免它,我通常在我的表委托/数据源上创建一个 ivar,然后我添加一个将对象保留在适当位置的属性。这样,以后滚动时不会回收该对象,我什至可以从代码的其他部分访问和更改其值(这实际上可能需要取决于应用程序)。这样您就不会放弃子类化和创建自己的标头的优势。

【讨论】:

这是关键!我把它当作 assign 哦不,我的问题是我使用的是同一个视图对象而不是创建一个新对象。

以上是关于滚动时 viewForHeaderInSection 消失的主要内容,如果未能解决你的问题,请参考以下文章

滚动其他滚动视图时滚动视图重置

当内容在滚动时改变高度时如何检测滚动方向

滚动其中一个时如何滚动多个QGraphicsView(无滚动条)

仅当父滚动视图到达结束时滚动子滚动视图

在调整滚动视图大小时滚动到滚动视图页面

滚动视图滚动时如何调用 uipangesture?