나는이 문제를 발견했습니다. 필자의 경우 후속 뷰는이 동작을 나타내지 않습니다. 다른 말로 표현하면, 폰트는 tableView : cellForRowAtIndexPath : 뒤에 처음으로 생성 된 테이블 뷰 의 경우에만 뒤에 명확하게 초기화됩니다. 이 문제를 해결 얻을
한 가지 방법은 셀 생성자에서 글꼴의 적절한 초기화를 보장하는 것입니다 :
카테고리에 새로운있는 UITableViewCell 생성자를 정의하고 호출 한 후 선택 이제까지 무엇을 기본값으로 textLabel라는 및 detailTextLabel에 대한 새로운 글꼴을 만들 super 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 카테고리 :있는 tableView에서
@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
예 건설 : 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;
}
'kCheck을 무엇을 목적 PointSize'는 제공합니까? – Stas
@Stas이 질문은 표시된 첫 번째 테이블보기의 글꼴 크기를 0으로 지정합니다. 내가 올바르게 기억한다면; 글꼴 크기가 후속 테이블보기에서 0으로 설정되지 않았습니다. 따라서 첫 번째 테이블보기 글꼴이 사용자가 지정한 값인지 확인합니다. 후속 테이블보기의 글꼴 크기는 시스템 기본값입니다. 또는 kCheckPointSize를 1로 설정하면이 기능을 상속하는 각 셀에 지정된 글꼴 크기가 적용됩니다. 이해가 되니? – stephen
고마워요, 이제는 분명합니다. – Stas