【问题标题】:Transparent row of pixels between section header and first cell in a grouped UITableView分组 UITableView 中节标题和第一个单元格之间的透明像素行
【发布时间】:2011-04-27 23:20:06
【问题描述】:

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

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

有什么想法吗?

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

TransparentRowBug XCode project

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

随意尝试(或更多)!

非常感谢!

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

【问题讨论】:

  • 您是否尝试过返回比所需高度小 10 像素?
  • 是的。这种行为在某种程度上是不确定的。标题视图将出现裁剪,但透明行有时仍会存在。如果我滚动并返回,我会得到一个白色的行,或一个黑色的行(可能来自裁剪区域的东西)或一个透明的行。我什至尝试将标题视图中的 UIImage 扩展到视图之外,并删除了“剪辑子视图”标志,因为我认为我可以以某种方式覆盖该空间。没有运气:(

标签: iphone uikit transparent uitableview


【解决方案1】:

经过近 2 天的测试(和脱发),我终于弄明白了。

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

然后,当您为标题返回较小尺寸时,它会神奇地(对我来说真的很神奇)设法重叠那令人讨厌的像素行。

顺便说一句,我得出的结论是像素行是由于单元格分隔线所致。

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

【讨论】:

  • 我遇到了完全相同的问题(这绝对是一个 iOS 错误),只需在虚拟 UIView 中返回我的标题视图即可解决问题,而不必为标题返回较小的尺寸。在viewForHeaderInSection 结尾我有:UIView *view = [[UIView alloc] initWithFrame:[headerView frame]]; [view addSubview:headerView]; return view;
  • 就我而言,我使用的是故事板,我返回的标题视图实际上是在 IB 中创建的原型 UITableViewCell。我怀疑只有当标题视图的类型是UITableViewCell 时才会出现问题,所以我测试了只返回一个空白(但有颜色)UIView,果然,这些行消失了。因此,将UITableViewCell 包装在UIView 中可以绕过该错误。如果标题视图的类型是 UITableViewCell 导致出现分隔符,Apple 肯定会做一些稍微不同的事情。
  • 该方法要求一个 UIView,而不是 UITableViewCell 是 UIView 的子类。我解决了返回 UITableViewCell.contentView 的问题;
【解决方案2】:

我不确定这是否是您要问的,但我在两天前发现您可以减少 tableView 中各部分之间的默认空间...

通过使heightForHeader 返回一个负值!很脏,但是……可以。

希望能帮到你……

【讨论】:

    【解决方案3】:

    我也遇到过这个问题。我有一个带有分组部分的 UITableView。在第一节标题和第一个单元格之间,有一个 1 点(2 个 Retina 像素)的间隙,背景渗出。

    如果背景单元格颜色是统一的,那么你可以分配 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;
    }
    

    【讨论】:

      【解决方案4】:

      在标题视图和第一行之间添加分隔符:- 在节委托方法中的标题视图中添加子视图 self.separator //@property (nonatomic, strong) UIImageView *separator;

      - (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;
      
      }
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-17
          • 1970-01-01
          • 2017-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-14
          相关资源
          最近更新 更多