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