有人可以告诉我最简单的方法来更改UITableView部分标题中文本的字体大小吗?
我使用以下方法实现了部分标题:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
然后,我了解如何使用此方法成功更改节标题高度:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
我使用此方法填充了UITableView单元格:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
但是,我不知道如何实际增加部分标题文本的字体大小 - 或者字体样式?
有人可以帮忙吗?感谢。
答案 0 :(得分:343)
另一种方法是回复UITableViewDelegate
方法willDisplayHeaderView
。传递的视图实际上是UITableViewHeaderFooterView
的实例。
下面的示例更改了字体,并且还在单元格中垂直和水平居中标题文本。请注意,您还应该回复heightForHeaderInSection
,以便在表格视图的布局中对标题的高度进行任何更改。 (也就是说,如果您决定使用此willDisplayHeaderView
方法更改标题高度。)
然后,您可以响应titleForHeaderInSection
方法,将此配置的标头重用为不同的标题。
<强>目标C 强>
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
header.textLabel.textColor = [UIColor redColor];
header.textLabel.font = [UIFont boldSystemFontOfSize:18];
CGRect headerFrame = header.frame;
header.textLabel.frame = headerFrame;
header.textLabel.textAlignment = NSTextAlignmentCenter;
}
Swift 1.2
(注意:如果您的视图控制器是UITableViewController
的后代,则需要将其声明为override func
。)
override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int)
{
let header:UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView
header.textLabel.textColor = UIColor.redColor()
header.textLabel.font = UIFont.boldSystemFontOfSize(18)
header.textLabel.frame = header.frame
header.textLabel.textAlignment = NSTextAlignment.Center
}
Swift 3.0
如果您的标题视图不是UITableViewHeaderFooterView,此代码还可确保应用不会崩溃:
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
guard let header = view as? UITableViewHeaderFooterView else { return }
header.textLabel?.textColor = UIColor.red
header.textLabel?.font = UIFont.boldSystemFont(ofSize: 18)
header.textLabel?.frame = header.frame
header.textLabel?.textAlignment = .center
}
答案 1 :(得分:109)
不幸的是,你可能不得不重写:
在Objective-C中:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
在斯威夫特:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
尝试这样的事情:
在Objective-C中:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UILabel *myLabel = [[UILabel alloc] init];
myLabel.frame = CGRectMake(20, 8, 320, 20);
myLabel.font = [UIFont boldSystemFontOfSize:18];
myLabel.text = [self tableView:tableView titleForHeaderInSection:section];
UIView *headerView = [[UIView alloc] init];
[headerView addSubview:myLabel];
return headerView;
}
在斯威夫特:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let myLabel = UILabel()
myLabel.frame = CGRect(x: 20, y: 8, width: 320, height: 20)
myLabel.font = UIFont.boldSystemFont(ofSize: 18)
myLabel.text = self.tableView(tableView, titleForHeaderInSection: section)
let headerView = UIView()
headerView.addSubview(myLabel)
return headerView
}
答案 2 :(得分:92)
虽然mosca1337的答案是正确的解决方案,但要小心这种方法。对于文本长于一行的标题,您必须在tableView:heightForHeaderInSection:
中执行标题高度的计算,这可能很麻烦。
一种更受欢迎的方法是使用外观API:
[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setFont:[UIFont boldSystemFontOfSize:28]];
这将改变字体,同时仍然离开桌子来管理高度本身。
为了获得最佳结果,请将表视图子类化,并将其添加到包含链(appearanceWhenContainedIn:
)中,以确保仅针对特定表视图更改字体。
答案 3 :(得分:23)
对于iOS 7,我使用它,
-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
header.textLabel.font = [UIFont boldSystemFontOfSize:10.0f];
header.textLabel.textColor = [UIColor orangeColor];
}
这是 Swift 3.0 版本,标题大小调整
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let header = view as? UITableViewHeaderFooterView {
header.textLabel!.font = UIFont.systemFont(ofSize: 24.0)
header.textLabel!.textColor = UIColor.orange
}
}
答案 4 :(得分:15)
斯威夫特3:
调整仅尺寸的最简单方法:
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
let header = view as! UITableViewHeaderFooterView
if let textlabel = header.textLabel {
textlabel.font = textlabel.font.withSize(15)
}
}
答案 5 :(得分:8)
Swift 2.0 :
实现viewForHeaderInSection,如下所示:
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let sectionTitle: String = self.tableView(tableView, titleForHeaderInSection: section)!
if sectionTitle == "" {
return nil
}
let title: UILabel = UILabel()
title.text = sectionTitle
title.textColor = UIColor(red: 0.0, green: 0.54, blue: 0.0, alpha: 0.8)
title.backgroundColor = UIColor.clearColor()
title.font = UIFont.boldSystemFontOfSize(15)
return title
}
实现willDisplayHeaderView,如下所示:
override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let view = view as? UITableViewHeaderFooterView {
view.backgroundView?.backgroundColor = UIColor.blueColor()
view.textLabel!.backgroundColor = UIColor.clearColor()
view.textLabel!.textColor = UIColor.whiteColor()
view.textLabel!.font = UIFont.boldSystemFontOfSize(15)
}
}
请记住:如果您使用静态单元格,由于UITableView的顶部,第一个部分标题的填充高于其他部分标题;解决这个问题:
实现heightForHeaderInSection,如下所示:
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 30.0 // Or whatever height you want!
}
答案 6 :(得分:3)
使用此方法,您还可以设置字体大小,字体样式和标题背景。 这个
有2种方法第一种方法
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section{
UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
header.backgroundView.backgroundColor = [UIColor darkGrayColor];
header.textLabel.font=[UIFont fontWithName:@"Open Sans-Regular" size:12];
[header.textLabel setTextColor:[UIColor whiteColor]];
}
第二种方法
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 30)];
// myLabel.frame = CGRectMake(20, 8, 320, 20);
myLabel.font = [UIFont fontWithName:@"Open Sans-Regular" size:12];
myLabel.text = [NSString stringWithFormat:@" %@",[self tableView:FilterSearchTable titleForHeaderInSection:section]];
myLabel.backgroundColor=[UIColor blueColor];
myLabel.textColor=[UIColor whiteColor];
UIView *headerView = [[UIView alloc] init];
[headerView addSubview:myLabel];
return headerView;
}
答案 7 :(得分:2)
Swo 4 版本的Leo Natan answer是
UILabel.appearance(whenContainedInInstancesOf: [UITableViewHeaderFooterView.self]).font = UIFont.boldSystemFont(ofSize: 28)
如果您想设置自定义字体,可以使用
if let font = UIFont(name: "font-name", size: 12) {
UILabel.appearance(whenContainedInInstancesOf: [UITableViewHeaderFooterView.self]).font = font
}
答案 8 :(得分:2)
在这里,您必须按照此处编写一些方法。 #Swift 5
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
let header = view as? UITableViewHeaderFooterView
header?.textLabel?.font = UIFont.init(name: "Montserrat-Regular", size: 14)
header?.textLabel?.textColor = .greyishBrown
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 26
}
祝你好运
答案 9 :(得分:1)
Swift 2:
正如OP所问,仅调整大小,而不是将其设置为系统粗体字体或其他:
func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let headerView = view as? UITableViewHeaderFooterView, textLabel = headerView.textLabel {
let newSize = CGFloat(16)
let fontName = textLabel.font.fontName
textLabel.font = UIFont(name: fontName, size: newSize)
}
}
答案 10 :(得分:0)
这是我的快速解决方案5。
要完全控制标题节视图,您需要在控制器中使用tableView(:viewForHeaderInsection::)方法,如前一篇文章所示。但是,还有一个步骤:为了提高性能,Apple建议不要每次都生成一个新视图,而是像重用表单元格一样重新使用头视图。这是通过tableView.dequeueReusableHeaderFooterView(withIdentifier:)方法实现的。但是我遇到的问题是,一旦您开始使用此重用功能,字体将无法按预期运行。其他诸如颜色,对齐方式等都很好,但只是字体。有一些讨论,但是我使它像下面那样工作。
问题是tableView.dequeueReusableHeaderFooterView(withIdentifier :)与tableView.dequeneReuseCell(:)不同,后者总是返回一个单元格。如果没有人,前者将返回nil。即使返回一个重用头视图,它也不是您原来的类类型,而是一个UITableHeaderFooterView。因此,您需要做出判断并按照自己的代码行事。基本上,如果为零,则获得一个全新的标题视图。如果不是nil,则强制强制投放,以便您可以控制。
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let reuse_header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "yourHeaderID")
if (reuse_header == nil) {
let new_sec_header = YourTableHeaderViewClass(reuseIdentifier:"yourHeaderID")
new_section_header.label.text="yourHeaderString"
//do whatever to set color. alignment, etc to the label view property
//note: the label property here should be your custom label view. Not the build-in labelView. This way you have total control.
return new_section_header
}
else {
let new_section_header = reuse_section_header as! yourTableHeaderViewClass
new_sec_header.label.text="yourHeaderString"
//do whatever color, alignment, etc to the label property
return new_sec_header}
}