这是问题,
我将UITableViewHeaderFooterView子类化并希望更改字体大小:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.textLabel.textColor = [UIColor colorWithWhite:0.8 alpha:1.0];
//the font is not working
self.textLabel.font = [UIFont systemFontOfSize:20];
NSLog(@"aaa%@", self.textLabel.font);
}
return self;
}
颜色的东西工作正常,但字体没有改变,所以我记录了dequeue:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UITableViewHeader *headerView = [self.tableView dequeueReusableHeaderFooterViewWithIdentifier:MWDrawerHeaderReuseIdentifier];
headerView.textLabel.text = self.sectionTitles[@(section)];
NSLog(@"bbb%@", headerView.textLabel.font);
return headerView;
}
字体仍然在这里,所以我登录didLayoutsubviews
:
-(void)viewDidLayoutSubviews
{
UITableViewHeaderFooterView *head = [self.tableView headerViewForSection:0];
NSLog(@"ccc%@", head.textLabel.font);
}
并且字体大小神奇地恢复到默认值!!!但是我之间没有做任何事情,如果我在viewDidLayoutSubviews
中再次更改字体大小,则字体变为正确。
它让我疯狂!
当子类化单元格时,我做同样的字体更改,它工作正常!所以有人能告诉我发生了什么事吗?谢谢!
这是日志:
2014-02-09 16:02:03.339 InternWell[33359:70b] aaa<UICTFont: 0x8da4290> font-family: ".HelveticaNeueInterface-M3"; font-weight: normal; font-style: normal; font-size: 20.00pt
2014-02-09 16:02:03.339 InternWell[33359:70b] bbb<UICTFont: 0x8da4290> font-family: ".HelveticaNeueInterface-M3"; font-weight: normal; font-style: normal; font-size: 20.00pt
2014-02-09 16:02:03.341 InternWell[33359:70b] aaa<UICTFont: 0x8da4290> font-family: ".HelveticaNeueInterface-M3"; font-weight: normal; font-style: normal; font-size: 20.00pt
2014-02-09 16:02:03.342 InternWell[33359:70b] bbb<UICTFont: 0x8da4290> font-family: ".HelveticaNeueInterface-M3"; font-weight: normal; font-style: normal; font-size: 20.00pt
2014-02-09 16:02:03.343 InternWell[33359:70b] ccc<UICTFont: 0x8d22650> font-family: ".HelveticaNeueInterface-MediumP4"; font-weight: bold; font-style: normal; font-size: 14.00pt
2014-02-09 16:02:03.343 InternWell[33359:70b] ccc<UICTFont: 0x8d22650> font-family: ".HelveticaNeueInterface-MediumP4"; font-weight: bold; font-style: normal; font-size: 14.00pt
答案 0 :(得分:21)
您可以实现 tableView:willDisplayHeaderView 并以这种方式更改字体:
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
if(section == ...)
{
UITableViewHeaderFooterView *headerView = (UITableViewHeaderFooterView *)view;
NSAttributedString *headerText = ... ;
headerView.textLabel.attributedText = headerText;
}
}
答案 1 :(得分:11)
它似乎不适合放置它,但您可以更改layoutSubviews
子类的UITableViewHeaderFooterView
方法中的字体,它将正确应用。
- (void)layoutSubviews {
[super layoutSubviews];
// Font
self.textLabel.font = [UIFont systemFontOfSize:20];
}
答案 2 :(得分:2)
即使在iOS 11中,textLabel
font
似乎也会被忽略。
另一种解决方案(Swift 4)是使用自定义标签。如果您已经拥有UITableViewHeaderFooterView
子类,那应该不难。
class MyTableViewHeader: UITableViewHeaderFooterView {
let customLabel = UILabel()
override init(reuseIdentifier: String?) {
super.init(reuseIdentifier: reuseIdentifier)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
override func layoutSubviews() {
super.layoutSubviews()
customLabel.frame = contentView.bounds
}
func setup() {
customLabel.textColor = UIColor(white: 0.8, alpha: 1)
customLabel.font = UIFont.systemFont(ofSize: 20)
contentView.addSubview(customLabel)
}
}
答案 3 :(得分:0)
这是 Swift 中的一个解决方案 - 这里的想法是我们有一个名为UITableViewHeaderFooterView
的{{1}}子类;它公开了一个名为SNStockPickerTableHeaderView
的方法,在调用时,它设置文本标签的字体和颜色。我们只在设置了标题后调用此方法,即configureTextLabel()
,并且字体设置正确。
willDisplayHeaderView
这是自定义// MARK: UITableViewDelegate
func tableView(tableView:UITableView, willDisplayHeaderView view:UIView, forSection section:Int) {
if let headerView:SNStockPickerTableHeaderView = view as? SNStockPickerTableHeaderView {
headerView.configureTextLabel()
}
}
func tableView(tableView:UITableView, viewForHeaderInSection section:Int) -> UIView? {
var headerView:SNStockPickerTableHeaderView? = tableView.dequeueReusableHeaderFooterViewWithIdentifier(kSNStockPickerTableHeaderViewReuseIdentifier) as? SNStockPickerTableHeaderView
if (headerView == nil) {
headerView = SNStockPickerTableHeaderView(backgroundColor:backgroundColor,
textColor:primaryTextColor,
lineSeparatorColor:primaryTextColor)
}
return headerView!
}
:
UITableViewHeaderFooterView
结果如下,请参阅“热门股票”部分标题: