【问题标题】:Removing cell borders from a section of grouped-style UITableView从分组样式 UITableView 的一部分中删除单元格边框
【发布时间】:2011-05-11 07:38:49
【问题描述】:

我有一个 UITableViewController 使用分组样式初始化并具有多个部分。对于其中一个部分,我希望其组成单元格完全透明并且没有边框。我计划为本节中的每一行分配一个自定义视图,但是让该自定义视图被分组的表格单元格包围看起来很糟糕:(

以下使单元格的背景颜色变为黑色而不是透明......我仍然不知道如何摆脱边框。

cell.backgroundColor = [UIColor clearColor];

有什么建议吗?谢谢!

【问题讨论】:

标签: iphone cocoa-touch uitableview


【解决方案1】:

从 iOS 8 开始,将 separator 属性设置为 none 也可以。

【讨论】:

    【解决方案2】:

    我只是想我会将我对@Intentss 的评论转换为答案,因为它可能对那些使用他的解决方案有用。

    使用带有分组 UITabelView 的 iOS6.1,使用 ARC:

    [tableView setSeparatorColor:[UIColor clearColor]];

    不起作用

    cell.backgroundView = [[UIView alloc] initWithFrame:CGRectZero];

    有效

    【讨论】:

      【解决方案3】:

      以下 hack 适用于 iOS 7 - 目前。 :)

      子类UITableViewCell,并将此单元格用于不应有分隔符的部分。
      覆盖单元子类中的addSubview 方法:

      -(void)addSubview:(UIView *)view
      {
          // The separator has a height of 0.5pt on a retina display and 1pt on non-retina.
          // Prevent subviews with this height from being added. 
          if (CGRectGetHeight(view.frame)*[UIScreen mainScreen].scale == 1)
          {
              return;
          }
      
          [super addSubview:view];
      }
      

      【讨论】:

      • 还要注意,这在 iOS6 上不起作用,所以对于 iOS6 cell.backgroundView = [UIView new];仍然是必需的。
      • @Pin 在 iOS 7 中,分隔符似乎是单独的子视图。这段代码只是阻止它们被添加到单元格中。虽然它不是很复杂。 :)
      • 在 iPad 高度为 1 ,iPhone 高度为 0.5
      • @RanyA.Ishak 实际上,造成差异的不是设备类型,而是屏幕分辨率。我修改了代码来处理视网膜和非视网膜显示器。
      • 也适用于 iOS9。绝妙的破解!
      【解决方案4】:

      注意:这似乎不适用于 iOS7 及更高版本。对于 iOS7,请尝试this 回答。

      对于 iOS6 及更低版本,从分组表格视图单元格中的单元格中删除分组背景:

      这不起作用

      cell.backgroundView = nil; // Did Not Work
      

      确实如此

      cell.backgroundView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
      

      如果您已移至 ARC(我听说这可行,但尚未测试)

      cell.backgroundView = [UIView new];
      

      【讨论】:

      • 这也适用于 iOS 4.3.3,我更喜欢这种解决方案,因为您可以单独删除每个单元格的边框,而不是删除表格视图的所有单元格的边框。
      • 同样设置cell.selectedBackgroundView,否则可能会高亮显示。
      • [cell setBackgroundColor:t.best5bgColor];
      • @RyanRomanchuk 我找到了一种适用于 iOS 7 的方法:stackoverflow.com/a/19220030/1372503
      • 非常感谢哥们,希望我早点找到这个。对于 iOS 7,我认为它不会为分组表添加任何样式。
      【解决方案5】:

      如果你有一个自定义的 UITableCellView 那么你可以在你的视图中添加下面的方法来移除背景视图。

      - (void)setBackgroundView:(UIView *)backgroundView
      {
          // We don't want background views for this cell.
          [super setBackgroundView:nil];
      }
      

      【讨论】:

        【解决方案6】:
        cell.backgroundView = [UIView new];
        

        像魅力一样工作!经测试! iOS6

        【讨论】:

          【解决方案7】:
           UIView *backView = [[UIView alloc] initWithFrame:CGRectZero];
           backView.backgroundColor = [UIColor clearColor];
           cell.backgroundView = backView;
           cell.backgroundColor = [UIColor clearColor];
           [cell.contentView addSubview:imageView];
          

          【讨论】:

            【解决方案8】:

            从分组样式的 UITableView 中删除单元格边框的最简单方法:

            [tableViewOutlet setBackgroundView:nil];
            

            在 viewDidLoad 方法中。

            【讨论】:

              【解决方案9】:

              设置内容视图也可以摆脱边框。将您的自定义视图设置为 cell.contentView。

              【讨论】:

                【解决方案10】:

                尝试使用tableView.separatorColor = [UIColor clearColor];

                而且,不要使用tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

                我对两者都进行了测试,如果样式为无,则使部分边框不可见是行不通的,而是只需更改其颜色,部分边框将显示为无。

                iOS 似乎正在区分使对象无对象和使对象透明

                【讨论】:

                • 问题是如何删除边框,而不是分隔符。
                • @JohanKarlsson 虽然属性是separatorColor,但它会影响tableView的Grouped样式的边框你自己试试吧~
                • 我试过了。我知道它会影响两者。但是您的回答中没有任何内容可以解释这一点;-)
                【解决方案11】:
                cell.backgroundColor = [UIColor clearColor];
                
                cell.backgroundView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
                

                【讨论】:

                  【解决方案12】:

                  这段代码对我有用:)

                  [self.tableView setSeparatorColor:[UIColor clearColor]];
                  [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
                  

                  【讨论】:

                    【解决方案13】:

                    这就是使用分组样式表的原因

                    [tableView setSeparatorColor:[UIColor clearColor]];

                    【讨论】:

                    • 这个解决方案对我有用!而且我认为这是比“cell.backgroundView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];”更好的解决方案从性能的角度。我正在使用分组样式表,iOS 5.1。谢谢
                    • 我不知道你在说什么样的性能,通常在图形性能方面将任何设置为 [UIColor clearColor] 是个坏主意,因为它是强制 GPU 的非 opqaue 层做透明度混合。
                    • 如果我将上面的内容与分组的表格视图一起使用,我会发现表格的整体边框消失了,这是我所期望的。似乎分隔符颜色 == 表格边框。
                    • 这个答案的另一个好处是你也可以在 IB 中使用它,这样你就可以看到你的单元格应该看起来的样子。
                    • 但这会从整个表格视图中删除分隔符,而不是从单个部分中删除。
                    【解决方案14】:

                    将单元格的 backgroundView 设置为 nil。对于分组表,单元格图像是该视图的一部分。

                    【讨论】:

                    • 不适用于 iOS 4.3.3,或者我不明白你在说什么。
                    【解决方案15】:

                    你必须实际设置

                    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
                    

                    删除单元格的边框。

                    【讨论】:

                    • 问题是询问分组表。 tableView.separatorStyle = UITableViewCellSeparatorStyleNone 不适用于分组表。
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-03-05
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-12-11
                    相关资源
                    最近更新 更多