部分标题和分组UITableView中的第一个单元格之间的透明像素行

时间:2011-04-27 23:20:06

标签: iphone uikit transparent uitableview

正如标题所说,我遇到了一排无法摆脱的透明像素问题 我附上一张图片,因为它值1000个字。

http://oi54.tinypic.com/288ahy.jpg

部分页脚没有问题(我也在使用自定义视图)。 我已经检查并仔细检查了我返回的部分高度的正确尺寸。

有什么想法吗?

修改
我添加了一个测试项目,这样你就可以玩了。紫色代表背景颜色。白色矩形是页眉/页脚,浅灰色是一些虚拟单元格。该问题在项目中清晰可见。

TransparentRowBug XCode project

您还会看到我使用了很多清晰的颜色。不幸的是,改变颜色以隐藏问题对我来说不是一个可行的解决方案。

随意尝试(或更多)!

非常感谢!

EDIT2:
经过进一步调查,我得出结论,像素线来自tableview分隔符。在测试项目中,我将separatorColor设置为clearColor。如果我将其更改为另一种颜色,我将获得新颜色中的那一行像素。即使我将分隔符样式设置为none,它似乎也对分组表没有影响。

5 个答案:

答案 0 :(得分:11)

经过近2天的测试(和脱发),我终于想出了这个。

正如我在上面的评论中所说,只是在heightForHeader方法中返回一个较小的高度是行不通的。要使其工作,您需要获取所需的标题视图,将其插入具有完全相同大小的虚拟/容器视图中,然后将此容器作为标题提供给tableView。

然后,当你为标题返回一个较小的大小时,它神奇地(对我来说真的很神奇)设法重叠那个烦人的像素行。

顺便说一句,我得出结论,像素行是由细胞分离线引起的。

如果有人感兴趣,我可以再次上传工作测试项目。

答案 1 :(得分:0)

我不确定这是不是你问的问题,但我两天前想到你可以减少tableView中各部分之间的默认空间......

heightForHeader返回负值!很脏,但......很有效。

我希望有帮助...

答案 2 :(得分:0)

我也遇到过这个问题。我有一个UITableView与分组部分。在第一个部分标题和第一个单元格之间,有一个1点(2个视网膜像素)间隙,背景渗透。

如果背景单元格颜色是均匀的,那么您可以指定UITableView的backgroundColor来隐藏这个间隙。

在我的例子中,backgroundColor / backgroundView用于其他单元格上的非滚动图案背景。 mluisbrown提出的解决方案非常有效。我想再次强调这个解决方案:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
   UIView* topTabView = /* initialized elsewhere */;
   CGRect sectionHeaderSize = CGRectMake(0, 0, 320, 46);
   UIView* wrapperView = [[UIView alloc] initWithFrame:sectionHeaderSize];
   topTabView.frame = sectionHeaderSize;
   [wrapperView addSubview:topTabView];
   return wrapperView;
}

答案 3 :(得分:0)

在标题视图和第一行之间添加一个分隔符: - 为了查看委托方法中的标题,添加一个子视图self.separator // @ property(非原子,强)UIImageView *分隔符;

- (CGFloat)tableView:(UITableView *)tableView
heightForHeaderInSection:(NSInteger)section {

return 41; 
}


- (UIView *)tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger)section {

self.headerView = [[UIView alloc] init];
self.headerView.backgroundColor = [UIUtils colorForRGBColor:TIMESHEET_HEADERVIEW_COLOR];

self.separator = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"seperator.png"]];
self.separator.frame = CGRectMake(0,40,self.view.frame.size.width,1);
[self.headerView addSubview:self.separator];
return self.headerView;

}

答案 4 :(得分:0)

Grouped UITableView将标题,单元格和页脚作为单个实体。所以白色透明视图是页脚视图,可以通过降低页脚高度来处理,如屏幕截图所示。我希望它有效 祝你好运:)