【问题标题】:Wrong Background Color in Accessory View on iOS7iOS7 附件视图中的背景颜色错误
【发布时间】:2013-10-16 14:30:03
【问题描述】:

我有一个 UITableView,我已将单元格背景颜色设置为 RGB 244、240、246。我通过在表格、表格单元格和表格单元格中的内容视图上设置背景颜色来完成此操作。

但是,配件(在本例中为复选标记)具有黑色背景。

当我在表格上启用编辑时,左侧的删除圆圈也有黑色背景。

我似乎无法更改此背景颜色。

我已经尝试使用以下代码:

cell.editingAccessoryView = [[UIView alloc] init];
cell.editingAccessoryView.backgroundColor = [UIColor colorWithRed:244/255 green:240/255 blue:246/255 alpha:1.0];

但它没有效果。

我尝试在情节提要中寻找设置,但似乎没有任何区别。

我确实注意到,如果我将表格单元格和内容视图背景颜色更改为“默认”,整个单元格背景将变为黑色(即使表格背景颜色仍然是我的自定义颜色)。

我浏览了 iOS7 转换指南,但没有看到任何与 UIAccessoryView 相关的内容。我也通过 stackoverflow 进行了搜索,但找不到与我遇到的问题匹配的任何内容。

我该如何解决这个问题?

【问题讨论】:

  • 我认为您需要使用 [iOS 7 中的不同方法][1] [1] 更改背景颜色:stackoverflow.com/questions/18878258/…
  • 我可以将单元格背景颜色更改为我想要的任何颜色,并且效果很好。我没有在代码中执行此操作,而是通过表格单元格中的内容视图执行此操作,作为该问题的建议答案之一。我无法更改的是附件视图背景颜色。
  • 附件视图不在单元格的 contentView 内,这就是为什么我建议更改整个单元格的背景。
  • 我也在故事板中将单元格背景设置为我的自定义颜色(不仅仅是单元格中的内容视图)。但是,我只是将它添加到我的 cellForRowAtIndexPath 方法(cell.backgroundColor)中,我仍然在附件视图中获得黑色背景。
  • 我遇到了基本相同的问题(但我的附件是自定义视图,而不是系统类型),并且默认的白色背景显示在 iOS7 上。 RyanR 的第一条评论对我来说非常有效,即转到另一个 SO 问题并查看关于 tableView:willDisplayCell:forRowAtIndexPath: 的公认答案。这解决了我的问题,也可能解决你的问题。

标签: ios uitableview uiaccessoryview


【解决方案1】:

在 iOS 7 中,单元格默认为白色背景;在早期版本的 iOS 中,单元格继承了封闭表格视图的背景颜色。如果要更改单元格的背景颜色,请在表格视图委托的 tableView:willDisplayCell:forRowAtIndexPath: 方法中进行。

希望对你有帮助

【讨论】:

    【解决方案2】:

    您需要设置UITableViewCell 的backgroundView 属性,不能像您可能已经看到的那样简单地更改editingAccessoryView。而是执行以下操作:

    UIView *aBackgroundView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
    aBackgroundView.backgroundColor = [UIColor yourColor];
    yourCell.backgroundView = aBackgroundView;
    

    或者在

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    

    用途:

    cell.contentView.superview.backgroundColor = [UIColor redColor];
    

    【讨论】:

    • 不幸的是,您的建议都没有为我纠正。它们都导致配件上的黑色背景与我的屏幕截图中相同。
    • @kinadian:很好奇。我不记得 Apple 更改了 iOS 7 中的规范,所以这让我想知道这是否是您正在处理的平台错误......
    【解决方案3】:

    对于表格视图单元格,有一个名为backgroundView 的属性。您只需要更改背景视图的背景颜色。就是这样。

     cell.backgroundView.backgroundColor = [UIColor yourcolor];
    

    【讨论】:

      【解决方案4】:

      对于 iOS 7,将其放在自定义表格单元格代码中

      - (void)willTransitionToState:(UITableViewCellStateMask)state
      {
          [super willTransitionToState:state];
          if ((state & UITableViewCellStateShowingEditControlMask) == UITableViewCellStateShowingEditControlMask)
          {
              for (UIView *subview in self.subviews)
              {
                  if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellScrollView"])
                  {
                      subview.backgroundColor  = [UIColor colorWithRed:0.69 green:0.769 blue:0.871 alpha:1];
                  }
              }
          }
      

      }

      【讨论】:

        【解决方案5】:

        问题是由颜色对象引起的。正确的行是:

        cell.editingAccessoryView.backgroundColor = [UIColor colorWithRed:244/255.0f green:240/255.0f blue:246/255.0f alpha:1.0];
        

        我最好的猜测是,如果没有 .0f,它会将数字视为整数并将所有值截断为 0(这会给我黑色)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-09
          • 2013-10-10
          • 1970-01-01
          • 2014-01-06
          • 2023-03-03
          • 1970-01-01
          相关资源
          最近更新 更多