2012-01-12 1 views
3

글꼴 크기를 가져올 수 없습니다. 내 글꼴이 제로와 같은 이유는 무엇입니까?UIFont : 글꼴 크기를 가져올 수 없습니다. 내 글꼴이 제로와 같은 이유는 무엇입니까?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kQuestionIdentifier]; 
     if (cell == nil) 
     { 
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kQuestionIdentifier] autorelease]; 
     } 

     cell.textLabel.text = [self extractText:indexPath forLabelAttribute:kTextLabel]; 
     cell.textLabel.lineBreakMode = UILineBreakModeWordWrap; 
     cell.textLabel.numberOfLines = 0; 

     NSLog(@"______font family%@", cell.textLabel.font.familyName); 
     NSLog(@"______font name%@", cell.textLabel.font.fontName); 
     NSLog(@"______font size%f", cell.textLabel.font.pointSize); 

그리고 로그 : 제시 한 첫 번째 테이블보기가 구축 될 때

______font family.Helvetica NeueUI 

______font name.HelveticaNeueUI-Bold 

______font size0.000000 

답변

2

나는이 문제를 발견했습니다. 필자의 경우 후속 뷰는이 동작을 나타내지 않습니다. 다른 말로 표현하면, 폰트는 tableView : cellForRowAtIndexPath : 뒤에 처음으로 생성 된 테이블 뷰 의 경우에만 뒤에 명확하게 초기화됩니다. 이 문제를 해결 얻을

한 가지 방법은 셀 생성자에서 글꼴의 적절한 초기화를 보장하는 것입니다 :
카테고리에 새로운있는 UITableViewCell 생성자를 정의하고 호출 한 후 선택 이제까지 무엇을 기본값으로 textLabel라는 및 detailTextLabel에 대한 새로운 글꼴을 만들 super initWithStyle :.

두 건설 전략 :

  • 만 영향을받는 테이블 뷰에서이 새로운 생성자를 사용하고 을 확실히 당신의 기본값은 OS 기본값과 일치한다.

  • 는 또한 모든 테이블 뷰의 일관성을 보장하기 이 새로운 생성자 모든있는 UITableViewCell 생성자 호출을 교체하고 는 포인트 사이즈에 대한 검사를 생략합니다. 기본값은 향후 운영 체제 개정에서 변경 될 수 있으므로이 전략이 도움이 될 것입니다.

여기에 나열된 기본값을 참조로 사용할 수 있습니다. 하지만 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; 

} 
+0

'kCheck을 무엇을 목적 PointSize'는 제공합니까? – Stas

+1

@Stas이 질문은 표시된 첫 번째 테이블보기의 글꼴 크기를 0으로 지정합니다. 내가 올바르게 기억한다면; 글꼴 크기가 후속 테이블보기에서 0으로 설정되지 않았습니다. 따라서 첫 번째 테이블보기 글꼴이 사용자가 지정한 값인지 확인합니다. 후속 테이블보기의 글꼴 크기는 시스템 기본값입니다. 또는 kCheckPointSize를 1로 설정하면이 기능을 상속하는 각 셀에 지정된 글꼴 크기가 적용됩니다. 이해가 되니? – stephen

+0

고마워요, 이제는 분명합니다. – Stas