Simple Table(4)~フォントと行高の変更
2010. 11. 02
●フォントサイズの変更

テーブルビューセルのフォントを変更するには、UITableViewDataSourceプロトコルのtableView:cellForRowAtIndexPath:メソッド内でfontプロパティを指定します。
(太字が追加した部分)

『Pickers(7)~DependentComponentPicker(2)』でも触れていますが、サイズ変更に使用しているboldSystemFontOfSize:メソッドはサイズ変更と太字化を行います。
(サイズを指定せずに)太字化だけを行うことはできませんが、サイズ変更だけならsystemFontOfSize:を使うこともできます。
また、fontプロパティもiOS 3.0で非推奨になっていますので、textLabelに置き換えます。
(太字が修正した部分)

textLabelに置き換えるついでにsystemFontOfSize:にしてみました。

・font
@property(nonatomic, retain) UIFont *font
タイトルのフォントです。
(iOS 3.0では非推奨です。フォントの設定には代わりにUILabelオブジェクトを割り当て、textLabelとdetailTextLabelプロパティを使用してください)
このプロパティのデフォルト値はnilであり、UITableViewCellはデバイスに最適な標準フォントを使用します。
・systemFontOfSize:
+ (UIFont *)systemFontOfSize:(CGFloat)fontSize
標準インターフェイスのアイテムとして使用するため、指定したサイズでフォントオブジェクトを返します。
fontSize:フォントのサイズをポイント単位で指定します。
この値は0.0より大きくする必要があります。
●行高の変更
行の高さを変更するには、UITableViewDelegateプロトコルのtableView:heightForRowAtIndexPath:メソッドを使用します。
デリゲートメソッドの記述の下にtableView:heightForRowAtIndexPath:メソッドを追加します。

サンプルコードでは高さを180ポイント(ピクセル)としていますが、ここでは90ポイントにしています。

実際の表示では、行間に入る1ピクセルのグレーの線1本分も含みます。
戻り値はCGFloatですが試してみた所、90.4ポイントでは90ピクセルに、90.5ポイントでは91ピクセルで表示されました。
・tableView:heightForRowAtIndexPath:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
指定した場所の行に適用される高さをデリゲートに尋ねます。
戻り値は、指定した行の高さをポイントで表した浮動小数点値になります。
このメソッドは、指定した行の高さの変更をデリゲートに与えます。
このメソッドを実装すると、指定した行はUITableVIewのrowHeightプロパティで指定されている値をオーバーライドします。
rowHeightプロパティでパフォーマンスに影響が出る場合は、代わりにtableView:heightForRowAtIndexPath:を使用してください。
常にテーブルビューを表示する時は、各行がデリゲートに対してtableView:heightForRowAtIndexPath:を呼び出すので、(約1000行以上になるような)多数の行を持つテーブルビューではパフォーマンスに重大な結果を与えます。
重要:基本的に実装する際は戻り値が2009より大きくならないようにしてください。
tableView:この情報を要求するテーブルビューオブジェクトを指定します。
indexPath:tableView内の行の位置を示すインデックスパスを指定します。
参考文献
・UITableViewCell Class Reference

テーブルビューセルのフォントを変更するには、UITableViewDataSourceプロトコルのtableView:cellForRowAtIndexPath:メソッド内でfontプロパティを指定します。
(太字が追加した部分)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleTableIdentifier] autorelease];
}
NSUInteger row = [indexPath row];
cell.textLabel.text = [listData objectAtIndex:row];
cell.font = [UIFont boldSystemFontOfSize:80];
UIImage *image = [UIImage imageNamed:@"sw.png"];
cell.imageView.image = image;
return cell;
}
static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleTableIdentifier] autorelease];
}
NSUInteger row = [indexPath row];
cell.textLabel.text = [listData objectAtIndex:row];
cell.font = [UIFont boldSystemFontOfSize:80];
UIImage *image = [UIImage imageNamed:@"sw.png"];
cell.imageView.image = image;
return cell;
}

『Pickers(7)~DependentComponentPicker(2)』でも触れていますが、サイズ変更に使用しているboldSystemFontOfSize:メソッドはサイズ変更と太字化を行います。
(サイズを指定せずに)太字化だけを行うことはできませんが、サイズ変更だけならsystemFontOfSize:を使うこともできます。
また、fontプロパティもiOS 3.0で非推奨になっていますので、textLabelに置き換えます。
(太字が修正した部分)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleTableIdentifier] autorelease];
}
NSUInteger row = [indexPath row];
cell.textLabel.text = [listData objectAtIndex:row];
cell.textLabel.font = [UIFont systemFontOfSize:80];
UIImage *image = [UIImage imageNamed:@"sw.png"];
cell.imageView.image = image;
return cell;
}
static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleTableIdentifier] autorelease];
}
NSUInteger row = [indexPath row];
cell.textLabel.text = [listData objectAtIndex:row];
cell.textLabel.font = [UIFont systemFontOfSize:80];
UIImage *image = [UIImage imageNamed:@"sw.png"];
cell.imageView.image = image;
return cell;
}

textLabelに置き換えるついでにsystemFontOfSize:にしてみました。

・font
@property(nonatomic, retain) UIFont *font
タイトルのフォントです。
(iOS 3.0では非推奨です。フォントの設定には代わりにUILabelオブジェクトを割り当て、textLabelとdetailTextLabelプロパティを使用してください)
このプロパティのデフォルト値はnilであり、UITableViewCellはデバイスに最適な標準フォントを使用します。
・systemFontOfSize:
+ (UIFont *)systemFontOfSize:(CGFloat)fontSize
標準インターフェイスのアイテムとして使用するため、指定したサイズでフォントオブジェクトを返します。
fontSize:フォントのサイズをポイント単位で指定します。
この値は0.0より大きくする必要があります。
●行高の変更
行の高さを変更するには、UITableViewDelegateプロトコルのtableView:heightForRowAtIndexPath:メソッドを使用します。
デリゲートメソッドの記述の下にtableView:heightForRowAtIndexPath:メソッドを追加します。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 90;
}
return 90;
}

サンプルコードでは高さを180ポイント(ピクセル)としていますが、ここでは90ポイントにしています。

実際の表示では、行間に入る1ピクセルのグレーの線1本分も含みます。
戻り値はCGFloatですが試してみた所、90.4ポイントでは90ピクセルに、90.5ポイントでは91ピクセルで表示されました。
・tableView:heightForRowAtIndexPath:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
指定した場所の行に適用される高さをデリゲートに尋ねます。
戻り値は、指定した行の高さをポイントで表した浮動小数点値になります。
このメソッドは、指定した行の高さの変更をデリゲートに与えます。
このメソッドを実装すると、指定した行はUITableVIewのrowHeightプロパティで指定されている値をオーバーライドします。
rowHeightプロパティでパフォーマンスに影響が出る場合は、代わりにtableView:heightForRowAtIndexPath:を使用してください。
常にテーブルビューを表示する時は、各行がデリゲートに対してtableView:heightForRowAtIndexPath:を呼び出すので、(約1000行以上になるような)多数の行を持つテーブルビューではパフォーマンスに重大な結果を与えます。
重要:基本的に実装する際は戻り値が2009より大きくならないようにしてください。
tableView:この情報を要求するテーブルビューオブジェクトを指定します。
indexPath:tableView内の行の位置を示すインデックスパスを指定します。
参考文献
・UITableViewCell Class Reference
![]() | はじめてのiPhone3プログラミング (2009/12/17) Dave Mark、Jeff LaMarche 他 商品詳細を見る |