提出了第一個表視圖在建造時我已經注意到這個問題。後續視圖在我的情況下不會出現這種行爲。換句話說,字體在tableView:cellForRowAtIndexPath後明顯初始化:對於第一個構建的表視圖只有。要解決這個問題
的方法之一是確保字體在細胞構造正確的初始化:
定義在一個類別一個新的UITableViewCell構造,創造了爲textLabel和detailTextLabel新的字體與您通話後選擇什麼都默認超級initWithStyle :.
兩個構建策略:
您可以使用此處列出的默認值作爲參考。雖然,我認爲它們自iOS 4.2以來已經發生了變化:Default font size of 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;
}
什麼目的確實'K檢查是否PointSize'服務? – Stas 2013-05-24 09:21:48
@Stas同樣,這個問題解決了第一個顯示的表視圖的歸零字體大小。如果我沒有記錯,在隨後的表格視圖中字體大小未被清零。因此,進行檢查可確保第一個表視圖字體是您指定的值。後續表格視圖中的字體大小將是系統默認值。或者,如果要將kCheckPointSize(設置爲1),則繼承此功能的每個單元格都將採用指定的字體大小。合理? – stephen 2013-05-24 18:19:44
非常感謝,現在很清楚。 – Stas 2013-05-25 07:03:50