Я заметил эту проблему при создании первого представленного представления таблицы.Последующие взгляды не демонстрируют такого поведения в моем случае.Другими словами, шрифт четко инициализируется после tableView: cellForRowAtIndexPath: для первого построенного табличного представления только .
Один из способов обойти это - обеспечить правильную инициализацию шрифтов в конструкторе ячеек:
Определить новый конструктор UITableViewCell в категории и создать новые шрифты для textLabel и detailTextLabel с теми значениями, которые по умолчанию установлены вами.выберите после вызова super initWithStyle :.
Две стратегии построения:
используйте этот новый конструктор только в затронутых табличных представлениях и убедитесь, что ваши значения по умолчанию соответствуют значениям по умолчанию ОС.
В качестве альтернативы замените все вызовы конструктора UITableViewCell этим новым конструктором, чтобы обеспечить согласованность для всех табличных представлений, и пропустите проверку для pointSize.Я бы, вероятно, согласился с этой стратегией, поскольку значения по умолчанию могут быть изменены в будущих версиях ОС.
Вы можете использовать значения по умолчанию, перечисленные здесь, в качестве справочных.Хотя, я думаю, они изменились с iOS 4.2: Размер шрифта по умолчанию для UITableViewCell
Вы можете альтернативно регистрировать их, используя симулятор, чтобы обнаружить их самостоятельно во втором построенном UITableView.
Пример кода:
Значения по умолчанию для ячейки:
#define kCellStyleSubtitleTextLabelFont @"Helvetica-Bold"
#define kCellStyleSubtitleTextLabelFontSize 18.0f
#define kCellStyleSubtitleDetailLabelFont @"Helvetica"
#define kCellStyleSubtitleDetailLabelFontSize 14.0f
#define kCellStyle1TextLabelFont @"Helvetica-Bold"
#define kCellStyle1TextLabelFontSize 17.0f
#define kCellStyle1DetailLabelFont @"Helvetica Bold"
#define kCellStyle1DetailLabelFontSize 15.0f
#define kCellStyle2TextLabelFont @"Helvetica-Bold"
#define kCellStyle2TextLabelFontSize 12.0f
#define kCellStyle2DetailLabelFont @"Helvetica"
#define kCellStyle2DetailLabelFontSize 15.0f
UITableViewCell Категория:
@interface UITableViewCell (fontDefaults)
-(id) initWithCellStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier;
@end
#define kCheckPointSize 0
@implementation UITableViewCell (fontDefaults)
-(id) initWithCellStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [self initWithStyle:style reuseIdentifier:reuseIdentifier];
if(self == nil)
return nil;
switch (style) {
case UITableViewCellStyleValue1: { //Left aligned label on left and right aligned label on right with blue text (Used in Settings)
#if kCheckPointSize
if(self.textLabel.font.pointSize == 0)
#endif
self.textLabel.font = [UIFont fontWithName:kCellStyle1TextLabelFont size:kCellStyle1TextLabelFontSize];
#if kCheckPointSize
if(self.detailTextLabel.font.pointSize == 0)
#endif
self.detailTextLabel.font = [UIFont fontWithName:kCellStyle1DetailLabelFont size:kCellStyle1DetailLabelFontSize];
break;
}
case UITableViewCellStyleValue2: { //Right aligned label on left with blue text and left aligned label on right (Used in Phone/Contacts)
#if kCheckPointSize
if(self.textLabel.font.pointSize == 0)
#endif
self.textLabel.font = [UIFont fontWithName:kCellStyle2TextLabelFont size:kCellStyle2TextLabelFontSize];
#if kCheckPointSize
if(self.detailTextLabel.font.pointSize == 0)
#endif
self.detailTextLabel.font = [UIFont fontWithName:kCellStyle2DetailLabelFont size:kCellStyle2DetailLabelFontSize];
break;
}
case UITableViewCellStyleSubtitle: { //Left aligned label on top and left aligned label on bottom with gray text (Used in iPod).
#if kCheckPointSize
if(self.textLabel.font.pointSize == 0)
#endif
self.textLabel.font = [UIFont fontWithName:kCellStyleSubtitleTextLabelFont size:kCellStyleSubtitleTextLabelFontSize];
#if kCheckPointSize
if(self.detailTextLabel.font.pointSize == 0)
#endif
self.detailTextLabel.font = [UIFont fontWithName:kCellStyleSubtitleDetailLabelFont size:kCellStyleSubtitleDetailLabelFontSize];
break;
}
default: //default cell style
case UITableViewCellStyleDefault: { //Simple cell with text label and optional image view (behavior of UITableViewCell in iPhoneOS 2.x). No detailTextLabel
#if kCheckPointSize
if(self.textLabel.font.pointSize == 0) //
#endif
self.textLabel.font = [UIFont fontWithName:kCellStyle1TextLabelFont size:kCellStyle1TextLabelFontSize];
break;
}
}
return self;
}
@end
Пример построения в tableView: cellForRowAtIndexPath:
static NSString *CellIdentifier = @"Style2Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithCellStyle:UITableViewCellStyleValue2
reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}