2012-01-14 3 views
0

사용자 정의 셀의 레이블이 겹치는 문제가 있습니다.사용자 정의 UITableView 셀의 UILabels 겹침

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 

    if (self) 
    { 
     self.img = [[[UIImageView alloc] init] autorelease]; 
     [self.contentView addSubview:self.img]; 

     self.p = [[[UILabel alloc] init] autorelease]; 
     [self.p setTextAlignment:UITextAlignmentCenter]; 
     [self.p setFont:[UIFont fontWithName:@"Helvetica" size:10.0]]; 
     [self.p setLineBreakMode:UILineBreakModeTailTruncation]; 
     [self.p setNumberOfLines:1]; 
     [self.p setTextColor:[UIColor whiteColor]]; 
     [self.p setBackgroundColor:[UIColor redColor]]; 
     [self.p setText:@"PREMIERA"]; 
     [self.contentView addSubview:self.p];   

     self.g = [[[UILabel alloc] init] autorelease]; 
     [self.g setTextAlignment:UITextAlignmentLeft]; 
     [self.g setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12.0]]; 
     [self.g setLineBreakMode:UILineBreakModeTailTruncation]; 
     [self.g setNumberOfLines:1]; 
     [self.contentView addSubview:self.g]; 

     self.t = [[[UILabel alloc] init] autorelease]; 
     [self.t setTextAlignment:UITextAlignmentLeft]; 
     [self.t setFont:[UIFont fontWithName:@"Helvetica-Bold" size:14.0]]; 
     [self.t setMinimumFontSize:12.0f]; 
     [self.t setAdjustsFontSizeToFitWidth:YES]; 
     [self.t setLineBreakMode:UILineBreakModeTailTruncation]; 
     [self.t setNumberOfLines:1]; 
     [self.contentView addSubview:self.t]; 

     self.o = [[[UILabel alloc] init] autorelease]; 
     [self.o setTextAlignment:UITextAlignmentLeft]; 
     [self.o setFont:[UIFont fontWithName:@"Helvetica" size:12.0]]; 
     [self.o setLineBreakMode:UILineBreakModeTailTruncation]; 
     [self.o setNumberOfLines:1]; 
     [self.contentView addSubview:self.o]; 
    } 

    return self; 
} 

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    self.img.frame = CGRectMake(0, 0, 40, 60); 
    self.p.frame = CGRectMake(0, 0, 0, 0); 
    self.g.frame = CGRectMake(0, 0, 0, 0); 
    self.t.frame = CGRectMake(0, 0, 0, 0); 
    self.o.frame = CGRectMake(0, 0, 0, 0); 

    CGSize pSize = CGSizeMake(0, 0); 
    CGSize gSize = CGSizeMake(0, 0); 
    CGSize tSize = [self.t.text sizeWithFont:self.t.font constrainedToSize:CGSizeMake(230, 16) lineBreakMode:self.t.lineBreakMode]; 
    CGSize oSize = [self.o.text sizeWithFont:self.o.font constrainedToSize:CGSizeMake(230, 16) lineBreakMode:self.o.lineBreakMode]; 


    if (self.jestPremiera) 
    { 
     pSize = [self.p.text sizeWithFont:self.p.font constrainedToSize:CGSizeMake(60, 16) lineBreakMode:self.p.lineBreakMode];  
     gSize = [self.g.text sizeWithFont:self.g.font constrainedToSize:CGSizeMake(175, 16) lineBreakMode:self.g.lineBreakMode]; 
     self.p.frame = CGRectMake(50, 5, 60, pSize.height); 
     self.p.hidden = NO; 
     self.g.frame = CGRectMake(115, 5, 175, gSize.height); 
    } 
    else 
    { 
     gSize = [self.g.text sizeWithFont:self.g.font constrainedToSize:CGSizeMake(230, 16) lineBreakMode:self.g.lineBreakMode];    
     self.p.hidden = YES; 
     self.g.frame = CGRectMake(50, 5, 230, gSize.height); 
    } 

    self.t.frame = CGRectMake(50, 5 + gSize.height, 230, tSize.height); 
    self.o.frame = CGRectMake(50, 5 + gSize.height + tSize.height, 230, oSize.height);    
} 

보통이 작동하지만, 때때로 (단지의 3G 장치)는 다음과 같습니다 : http://imageshack.us/f/17/tvkino1.jpg/

사람은 그 이유가 무엇인지 말해 주시겠습니까 여기 이 세포에 대한 초기화 및 레이아웃 방법이 있습니다 행동, 그리고 그걸로 내가 뭘 할 수 있을까?

답변

0

NSLog()를 사용하여 해당 레이블의 프레임을 디버깅하여 확인하십시오.

0

이 레이블을 할당 할 때 태그 번호를 사용하여 모든 레이블을 정의하면 최상의 솔루션이라고 생각합니다. 당신이이 레이블을 필요로 할 때 이제 다음 그냥 ...

yourlabelname = (UILabel *)[cell.contentView viewWithTag:yourLabelTagNumber]; 

하고 -(void)viewDidAppear 단지의 tableview를 다시로드에서이 같은이 라벨을 검토;

관련 문제