iOS:我的 TableView 标题的背景颜色在 iOS13 中不再改变

Posted

技术标签:

【中文标题】iOS:我的 TableView 标题的背景颜色在 iOS13 中不再改变【英文标题】:iOS: the background color of the header of my TableView is not changing anymore in iOS13 【发布时间】:2019-09-09 10:05:21 【问题描述】:

我的 TableView 的标题在 ios13 中显示不好。不管我放什么颜色,现在总是显示为浅灰色...

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
   //Section color & style

    UITableViewHeaderFooterView *v = (UITableViewHeaderFooterView *)view;

    v.backgroundView.alpha = 1;
    v.textLabel.textColor = sectionColor;
    v.textLabel.font = sectionFont;
    v.textLabel.numberOfLines = 1;
    v.textLabel.minimumScaleFactor = 0.5;
    v.textLabel.adjustsFontSizeToFitWidth = YES;
    v.backgroundView.backgroundColor = [UIColor blueColor];
 

iOS12:

iOS13:

奇怪的是,当我在调试器中一步一步停下来时,它在iOS13中显示了好的图像,但在应用程序中却没有:

任何建议,提前谢谢?

【问题讨论】:

我猜这可能与暗模式的适应有关。您可以尝试使用v.contentView.backgroundColor = ... 吗? @R4N 就是这样,谢谢 :D 你可以把它放在答案中,我会验证它。 【参考方案1】:

我在我的一个应用中注意到了同样的事情。 然后在控制台看到一条日志信息:

在 UITableViewHeaderFooterView 上设置背景颜色已经 已弃用。请使用您想要的背景设置自定义 UIView 改为 backgroundView 属性。

将所需背景颜色的自定义UIView 设置为UITableViewHeaderFooterViewbackgroundView 解决了该问题。

代码示例

class SomeHeaderView: UITableViewHeaderFooterView 

    override init(reuseIdentifier: String?) 
        super.init(reuseIdentifier: reuseIdentifier)
        configure()
    

    required init?(coder aDecoder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    

    private func configure() 
        let backgroundView = UIView(frame: .zero)
        backgroundView.backgroundColor = .blue
        self.backgroundView = backgroundView
    

【讨论】:

你能更具体一些并显示一些代码吗?通用视图并在 willDisplayHeaderView 中设置其背景颜色对我不起作用 @GarySabo 我在我的答案中添加了一个代码示例。它在UITableViewHeaderFooterView 子类而不是UITableViewDelegate 中配置背景视图。 谢谢,但是 SomeHeaderView 会在哪里被实例化和使用呢? ? 没关系,我使用viewForHeaderInSection 实现了这个并且效果很好?【参考方案2】:

这对我有用。

v.contentView.backgroundColor = .blue

而不是

v.backgroundView.backgroundColor = .blue

【讨论】:

【参考方案3】:

尝试添加覆盖视图并更改此视图的颜色。

UIView *coloredView = [[UIView alloc] init];
coloredView.backgroundColor = [UIColor blueColor];
[v addSubview:coloredView];

[[coloredView.leadingAnchor constraintEqualToAnchor:v.leadingAnchor constant:0] setActive:YES];
[[coloredView.trailingAnchor constraintEqualToAnchor:v.trailingAnchor constant:0] setActive:YES];
[[coloredView.topAnchor constraintEqualToAnchor:v.topAnchor constant:0] setActive:YES];
[[coloredView.bottomAnchor constraintEqualToAnchor:v.bottomAnchor constant:0] setActive:YES];

【讨论】:

以上是关于iOS:我的 TableView 标题的背景颜色在 iOS13 中不再改变的主要内容,如果未能解决你的问题,请参考以下文章

iOS:笔尖中的 TableView - 设置背景颜色

如何在 iOS 7 中更改 TableView 的 IndexBar 的背景颜色?

Xamarin ios - 如何从静态 TableView 访问单元格

在通用应用程序中设置 UITableView 背景颜色(iOS 5)

在具有多个部分的 tableView 中滚动时使用平滑动画更改视图背景渐变颜色

快速向右滑动时删除tableview灰色背景颜色