我creating a UITableViewHeaderFooterView from a xib file,几乎一切都正常。
现在的问题是,当我尝试更改背景颜色时(或者如果我在xib中配置了一个颜色),它会不断地将此消息输出到控制台:
不推荐在UITableViewHeaderFooterView上设置背景颜色。请改用contentView.backgroundColor。
这意味着我有两个问题:
contentView.backgroundColor
建议,但是当我尝试遵循该建议时,没有任何反应。 (这是因为contentView
是nil
。)注意:此处有一个similar question,但这主要涉及将消息静音,而不是找到解决上述两个问题的替代解决方案。
更新:为了清楚起见,我想继续使用xib文件作为标题视图,并希望能够调用dequeueReusableHeaderFooterViewWithIdentifier:以便表格可以高效管理意见。
答案 0 :(得分:18)
以下是我发现解决此问题的最佳方法:
UITableViewHeaderFooterView
的背景颜色重置为默认。UITableViewHeaderFooterView
的实例下添加一个视图,并将其命名为内容视图。 (这正是Apple对UITableViewCell
所做的,我们只是模仿这种结构。)inside
Content View
。contentView
属性,并将IBOutlet
添加到其定义中。 (见下面的代码。)contentView.backgroundColor
更改背景颜色,就像错误消息所示。.h文件:
@interface ABCHeaderView : UITableViewHeaderFooterView
@end
.m文件:
@interface ABCHeaderView ()
@property (nonatomic, readwrite, retain) IBOutlet UIView *contentView;
@end
@implementation ABCHeaderView
@synthesize contentView;
@end
此层次结构与Apple's documentation:
一致如果要显示自定义内容,请创建内容的子视图,并将其添加到contentView属性中的视图。
答案 1 :(得分:9)
要消除警告,您不能设置背景颜色。问题是当您以这种方式创建TableHeader时,IB不会为此提供特殊对象。 删除源代码中的背景颜色将极好地解决所描述的问题,只需点击一下即可。
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
现在您可以更改背景,如:
override func awakeFromNib() {
backgroundView = UIView()
backgroundView?.backgroundColor = UIColor.whiteColor()
}
答案 2 :(得分:2)
这对我有用:
-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
UITableViewHeaderFooterView *headerView=(UITableViewHeaderFooterView *)view;
[headerView.backgroundView setBackgroundColor:[[UIColor blackColor]colorWithAlphaComponent:0.4]];
}
答案 3 :(得分:2)
在UITableViewHeaderFooterView上设置背景颜色 弃用。请改用contentView.backgroundColor。
如果您在单独的xib文件中设计标题并在其中设置主UIView的背景,则会发生这种情况。
要解决这个问题,请将UIView背景颜色恢复为InterfaceBuilder中的默认颜色,并在viewForHeaderInSection:section方法中设置背景颜色。
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "CustomHeaderXibFileName") as! CustomHeader
header.contentView.backgroundColor = UIColor.blueColor
}
如您所见,我们使用的是header.contentView.backgroundColor
而不是header.backgroundColor
(这是xib文件实际执行的操作)。
答案 4 :(得分:0)
尝试下面的扩展代码,
extension UITableViewHeaderFooterView {
open override var backgroundColor: UIColor? {
get {
return self.backgroundView?.backgroundColor ?? UIColor.clear
}
set {
let bgView = UIView()
bgView.backgroundColor = newValue
backgroundView = bgView
}
}
}
并分配如下背景颜色,
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
guard let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "CustomHeaderView") as? CustomHeaderView else {
return UITableViewHeaderFooterView()
}
headerView.backgroundColor = .orange
return headerView
}
答案 5 :(得分:-1)
在willAppear委托回调中设置contentView.backgroundColor:
- (void)tableView:(UITableView *)tableView
willDisplayHeaderView:(UIView *)view
forSection:(NSInteger)section
或
- (void)tableView:(UITableView *)tableView
willDisplayFooterView:(UIView *)view
forSection:(NSInteger)section
答案 6 :(得分:-1)
如何使用代码创建自定义标头并放置它?
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSinteger)section {
UIView * myHeader = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 320, 40)];
[myHeader setBackgroundColor:[UIColor grayColor]];
UILabel * TitleLabel = [[UILabel alloc] initWithFrame: CGRectMake(10, 5, 320, 20)];
TitleLabel.text = @"My Title";
[myHeader addSubview:TitleLabel];
return myHeader;
}