UITableViewHeaderFooterView:无法更改背景颜色

我试图改变UITableViewHeaderFooterView的背景颜色。 尽pipe视图正在出现,但背景颜色仍然是默认颜色。 我从xcode得到一个日志说:

在UITableViewHeaderFooterView上设置背景颜色已被弃用。 请改用contentView.backgroundColor。

但是,以下选项都不起作用:

myTableViewHeaderFooterView.contentView.backgroundColor = [UIColor blackColor]; myTableViewHeaderFooterView.backgroundView.backgroundColor = [UIColor blackColor]; myTableViewHeaderFooterView.backgroundColor = [UIColor blackColor]; 

我也试着在xib文件中改变视图的背景颜色。

有什么build议么? 谢谢。

您应该使用myTableViewHeaderFooterView.tintColor,或将自定义背景视图分配给myTableViewHeaderFooterView.backgroundView。

iOS 8,9,10 …

设置任何颜色(使用任何alpha)的唯一方法是使用backgroundView

Swift 3

 self.backgroundView = UIView(frame: self.bounds) self.backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5) 

OBJ-C

 self.backgroundView = ({ UIView * view = [[UIView alloc] initWithFrame:self.bounds]; view.backgroundColor = [UIColor colorWithWhite: 0.5 alpha:0.5]; view; }); 

回应评论

  • 这些其他选项都没有可靠的工作(尽pipe下面的评论)

     // self.contentView.backgroundColor = [UIColor clearColor]; // self.backgroundColor = [UIColor clearColor]; // self.tintColor = [UIColor clearColor]; 
  • backgroundView自动resize。 (不需要添加约束)

  • UIColor(white: 0.5, alpha: 0.5)backgroundView.alpha = 0.5控制alpha。
    (当然,任何颜色都可以)

  • 在使用XIB时 ,请根查看UITableViewHeaderFooterView并以编程方式关联backgroundView

    注册:

     tableView.register(UINib(nibName: "View", bundle: nil), forHeaderFooterViewReuseIdentifier: "header") 

    加载:

     override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { if let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "header") { let backgroundView = UIView(frame: header.bounds) backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5) header.backgroundView = backgroundView return header } return nil } 

演示

►在GitHub上find这个解决scheme和Swift Recipes的更多细节。

在iOS 7中, contentView.backgroundColor为我工作, tintColor没有。

  headerView.contentView.backgroundColor = [UIColor blackColor]; 

虽然clearColor不适合我,我find的解决scheme是将backgroundView属性设置为透明图像。 也许它会帮助某人:

 UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 1), NO, 0.0); UIImage *blank = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); headerView.backgroundView = [[UIImageView alloc] initWithImage:blank]; 

对我来说,我尝试了上面所说的一切,但仍然得到了警告:“在UITableViewHeaderFooterView上设置背景颜色已被弃用,请改用contentView.backgroundColor。 然后我试着这个:在xib文件中,标题视图的背景颜色被选中来清除颜色,而不是默认的,一旦我改变它为默认的警告消失。 是这个

改成这个

确保你为你的UITableViewHeaderFooterView设置了contentView的backgroundColor:

 self.contentView.backgroundColor = [UIColor whiteColor]; 

然后它会工作。

iOS9 headerView.backgroundView.backgroundColor为我工作:

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ TableViewHeader *headerView = (TableViewHeader *)[super tableView:tableView viewForHeaderInSection:section]; headerView.backgroundView.backgroundColor = [UIColor redColor]; } 

iOS8上,我使用的headerView.contentView.backgroundColor没有问题的headerView.contentView.backgroundColor ,但现在iOS 9出现了一个奇怪的问题,使背景颜色不能填充单元格的整个空间。 所以我试着只是headerView.backgroundColor ,我得到了同样的错误从OP。

在UITableViewHeaderFooterView上设置背景颜色已被弃用。 请改用contentView.backgroundColor。

所以现在一切工作很好,没有警告通过使用headerView.backgroundView.backgroundColor

如果使用xib文件创build了UITableViewHeaderFooterView的自定义子类,则应该重写setBackgroundColor 。 保持空白。

 -(void)setBackgroundColor:(UIColor *)backgroundColor { } 

这将解决您的问题。

为了一个清晰的颜色,我使用

 self.contentView.backgroundColor = [UIColor clearColor]; self.backgroundView = [UIView new]; self.backgroundView.backgroundColor = [UIColor clearColor]; 

对我来说似乎很好。

如果要使用Storyboard / Nib自定义节标题单元格,请确保“Table Section Header”视图的默认背景颜色。

如果你UITableViewHeaderFooterView ,并使用nib,那么你必须做的是创build一个IBOutlet的内容视图,并命名为例如。 containerView 。 这不是与容器视图的父视图contentView混淆。

使用该设置,您可以改变containerView的背景颜色。

我试图用外观当包含在我的链中时,它为我工作。

 [[UIView appearanceWhenContainedIn:[UITableViewHeaderFooterView class], [UITableView class], nil] setBackgroundColor: [UIColor.grayColor]]; 

用清晰的颜色设置BackgroundView适用于可见的标题。 如果表格滚动以显示底部的标题,则此解决scheme失败。

PSMy表只包含没有任何单元的标题。

迅速:

 func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView { var headerView: TableViewHeader = super.tableView(tableView, viewForHeaderInSection: section) as! TableViewHeader headerView.backgroundView.backgroundColor = UIColor.redColor() } 

创buildUIView并设置背景颜色,然后将其设置为self.backgroundView。

 - (void)setupBackgroundColor:(UIColor *) color { UIView *bgView = [[UIView alloc] initWithFrame:self.bounds]; bgView.backgroundColor = color; self.backgroundView = bgView; } 

我感到不得不分享我的经验。 我有这样的代码,与iOS 10和iOS 11的headerView?.contentView.backgroundColor = .lightGray

然后,我突然决定部署iOS 9的应用程序,因为有一些设备(iPad mini,一些老一代不会更新到超过9的任何操作系统) – 唯一的解决scheme适用于所有iOS 9,10和11就是为头部定义一个基本视图,然后包含所有其他头部子视图,从故事板连接起来并设置该基本视图的backgroundColor

连接sockets时不要调用它: backgroundView因为在某些superclass已经有一个具有该名称的属性。 我叫我的containingView

此外,在连接sockets控制器时,请单击“ Document Outline的视图以确保它未连接到file owner