【问题标题】:Different cell bg color depending on iOS version (4.0 to 5.0)不同的单元格背景颜色取决于 iOS 版本(4.0 到 5.0)
【发布时间】:2011-10-11 23:49:46
【问题描述】:

我有一个自定义的分组 UITableViewCell,上面有几个 UILabel。由于 UITableViewCell 的背景颜色曾经是纯白色,它与 UILabel 的默认背景颜色匹配,因此 UILabel 框不可见..

更新到 iOS 5.0 后,我注意到现在分组 UITableViewCells 的默认背景颜色是更灰白色(实际上是 #f7f7f7),因此 UILabels 的框架以丑陋的方式可见..

那么,当 UILabel 需要在不同 iOS 版本之间变化时,设置 UILabel 的背景颜色的最佳方法是什么?我知道我可以使用 opaque = NO 和 [UIColor clearColor],但出于性能原因,我更愿意绘制 UILabel 的背景。

【问题讨论】:

  • 有趣的是我无法重现这个。我做了一个非常简单的分组 UITableView 并且单元格背景在 iOS 4 和 iOS 5 中是相同的灰色(在模拟器上)。

标签: ios uitableview ios5


【解决方案1】:

在委托方法tableView:willDisplayCell: 中,UITableViewCell 将背景颜色设置为白色,或者在 iOS 5 中为灰色。

您可以更改所有子视图的所有backgroundColor

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    for (UIView* view in cell.contentView.subviews) {
        view.backgroundColor = cell.backgroundColor;
    }
}

【讨论】:

    【解决方案2】:

    gcamp 的回答没有错,但是如果您希望在 iOS4 和 iOS5 上都保持背景为白色,那么只需这样做:

    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
        [cell setBackgroundColor:[UIColor whiteColor]];
    }
    

    【讨论】:

      【解决方案3】:

      我在分组 TableView 中的自定义 UITableViewCell 中看到了这个问题,我只是将标签背景颜色设置为清除,并为我修复了它并在 iOS4 和 iOS5 中工作。我在创建 UILabel 的自定义单元格代码中进行了设置,如下所示:

          [nameLabel setBackgroundColor:[UIColor clearColor]];
      

      在那个问题消失之后。

      【讨论】:

        【解决方案4】:

        您可以致电:

         [[UIDevice currentDevice] systemVersion]
        

        尽管出于多种原因不鼓励这样做,但我不确定这是解决您的问题的最佳方式。原则上,您应该能够部署视图代码并通过其他方式获得您想要的一致结果。

        如果您确实想要比较设备版本,您可能会设置一个属性并在视图控制器加载时检查设备的操作系统,而不是在您的 cellForRowAtIndexPath...

        【讨论】:

          【解决方案5】:

          我所做的是在 willdisplaycell 中将单元格的背景颜色设置为 [UIColor whiteColor]...

          这样我可以控制事物的外观。

          【讨论】:

            【解决方案6】:

            它使用UIColor.systemBackground,但仅适用于 IOS 13 所以像这样使用它:

            if #available(iOS 13.0, *) {
            
              cell.backgroundColor = UIColor.systemBackground
            
            } else {
            
              cell.backgroundColor = .white
            
            }
            

            【讨论】:

              猜你喜欢
              • 2021-02-12
              • 2022-11-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-06-29
              • 2023-03-23
              • 2012-12-21
              • 1970-01-01
              相关资源
              最近更新 更多