UITableViewセクションヘッダー内のテキストのフォントサイズを変更する最も簡単な方法を教えてもらえますか?
次の方法を使用して、セクションタイトルを実装しています。
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
次に、この方法を使用してセクションヘッダーの高さを正常に変更する方法を理解します。
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
このメソッドを使用してUITableViewセルにデータを入力しました:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
しかし、私は実際にセクションヘッダーテキストのフォントサイズを増やす方法について固執していますか?それともフォントスタイルですか?
誰か助けてくれますか?ありがとう。
残念ながら、これをオーバーライドする必要がある場合があります。
Objective-Cの場合:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
Swiftの場合:
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;
}
Swiftの場合:
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
}
これを行う別の方法は、UITableViewDelegate
メソッドwillDisplayHeaderView
に応答することです。渡されたビューは、実際にはUITableViewHeaderFooterView
のインスタンスです。
次の例では、フォントを変更し、セル内でタイトルテキストを垂直および水平に中央揃えします。また、heightForHeaderInSection
に応答して、テーブルビューのレイアウトでヘッダーの高さの変更を考慮する必要があることに注意してください。 (つまり、このwillDisplayHeaderView
メソッドでヘッダーの高さを変更することにした場合。)
その後、titleForHeaderInSection
メソッドに応答して、この構成済みヘッダーをさまざまなセクションタイトルで再利用できます。
Objective-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
(注:View Controllerが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.
また、このコードは、ヘッダービューが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
}
Mosca1337の答えは正しい解決策ですが、その方法には注意してください。テキストが1行より長いヘッダーの場合、tableView:heightForHeaderInSection:
でヘッダーの高さの計算を実行する必要があり、面倒な場合があります。
最も好ましい方法は、外観APIを使用することです。
[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setFont:[UIFont boldSystemFontOfSize:28]];
これにより、高さ自体を管理するためにテーブルを残したまま、フォントが変更されます。
最適な結果を得るには、Table Viewをサブクラス化し、それを包含チェーンに追加して(appearanceWhenContainedIn:
内)、特定のTable Viewに対してのみフォントが変更されるようにします。
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.ヘッダーのサイズ変更を伴うバージョン
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
}
}
Swift 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)
}
}
Swift 2.:
次のように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!
}
この方法では、フォントサイズ、フォントスタイル、ヘッダーの背景も設定できます。これには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]];
}
2番目の方法
- (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;
}
Swift 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
}
Swift 2:
OPが尋ねたように、onlyサイズを調整し、システムの太字フォントなどに設定しません:
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)
}
}