2014-12-18 1 views
1

를 사용하여 내가 엑스 코드 (6)을 사용하여 새 프로젝트를 생성하고 올바르게 iOS8의에서 일하고으로 iOS7에에 자동 레이아웃에 문제가 무엇입니까 아이폰 OS 7 UItablview 셀에 UIlable의 동적 높이를 확인합니다. 나는 코드 아래 사용하고 있습니다 : -어떻게 XCode6

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *simpleTableIdentifier = @"cell"; 

    UITableViewCell *cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 
    UILabel *lbl1=(UILabel*)[cell.contentView viewWithTag:1]; 
    lbl1.text = @"test fkdjsjk kjhsdf ksjh ksjdhf jks kjh kjdhf kjsd h kjh j ,jhfjdfshfk jh fkjsdh fkjs dhkfjhs dkjfh dksjhf jksd hfjkdhs fk jksdhf kjsdh fkjsdh fjkhdsk fjkdsh fkjdsh fkjdsh fkjs djkf djksf kjdshfkjds fkjdsh fkjhs dkjfh kdjs fkdjshfkdsjfh kdjsh fk"; 


     [lbl1 setPreferredMaxLayoutWidth:lbl1.frame.size.width]; 




    [cell setNeedsUpdateConstraints]; 
    [cell updateConstraintsIfNeeded]; 

    cell.frame = CGRectMake(0.0f, 0.0f, CGRectGetWidth(cell.bounds), CGRectGetHeight(tableView.bounds)); 

    [cell setNeedsLayout]; 
    [cell layoutIfNeeded]; 

    CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; 

    return height; 
} 
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *simpleTableIdentifier = @"cell"; 
    UITableViewCell *cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

    return cell.frame.size.height; 

} 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *simpleTableIdentifier = @"cell"; 

    UITableViewCell *cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 
     UILabel *lbl1=(UILabel*)[cell.contentView viewWithTag:1]; 
    lbl1.text = @"test fkdjsjk kjhsdf ksjh ksjdhf jks kjh kjdhf kjsd h kjh j ,jhfjdfshfk jh fkjsdh fkjs dhkfjhs dkjfh dksjhf jksd hfjkdhs fk jksdhf kjsdh fkjsdh fjkhdsk fjkdsh fkjdsh fkjdsh fkjs djkf djksf kjdshfkjds fkjdsh fkjhs dkjfh kdjs fkdjshfkdsjfh kdjsh fk"; 

    [lbl1 setBackgroundColor:[UIColor greenColor]]; 

    [cell.contentView setBackgroundColor:[UIColor redColor]]; 


    [cell setNeedsUpdateConstraints]; 
    [cell updateConstraintsIfNeeded]; 



    return cell; 
} 

내 요구 사항은 해당 라벨은 기본 높이 또는 폭을 제공 할 필요가 여기에

+0

는'lbl1.numberofline = 0 '으로 설정해야? –

+0

이것은 성장하는 레이블에 대해 줄 수를 설정하는 것이 기본입니다. –

+0

이미 수행 한 –

답변

0
+(CGSize)findTextHeight:(float)height width:(float)width string:(NSString *)desc font:(UIFont*)font{ 
    if ([desc isKindOfClass:[NSNull class]]) { 
     return 0.0; 
    } 
    CGRect textRect =[desc boundingRectWithSize:CGSizeMake(width, height) 
             options:NSStringDrawingUsesLineFragmentOrigin 
            attributes:@{NSFontAttributeName:font} 
             context:nil]; 
    CGSize size = textRect.size; 
    return size; 
} 

아이폰 OS 7에서 제공 내용에 따라 동적으로 높이를해야한다 및 레이블 텍스트 글꼴. 또한 이것을 귀하의 TableView heightForRowAtIndexPath 방법으로 설정하십시오.

+0

이미 구현되었으며 위의 findTextHeight 메소드는 자동 레이아웃 구현에 유용하지 않습니다. –

+0

Autolayout으로 iOS7에서 메소드를 제공하고 명시 적으로 계산할 필요가 없다고 생각합니다. –

0
// Pass the string value for display on label 

self.yourLabel.numberofline = 0 // don't forget to set the number of lines zero 
+(CGSize)heigtForCellwithString:(NSString *)stringValue 
    {  
     //For iPhone 
     UIFont *font = [UIFont fontWithName:@"Helvetica-Light" size:15];// Here change the font name and font size you have used. 
     CGSize constraint = CGSizeMake(320,9999); 
     NSDictionary *attributes = @{NSFontAttributeName: font}; 
     CGRect rect = [stringValue boundingRectWithSize:constraint 
               options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) 
              attributes:attributes 
               context:nil]; 
     return rect.size; 
    } 

    CGSize labelHeight = [NSString heigtForCellwithString:@"your text"]; 
    CGRect newFrame = self.yourLabel.frame; 
    newFrame.size.height = labelHeight.height; 
    self.yourLabel.frame = newFrame; 
+0

iOS7을 사용하는 XCode 6에서 생성 된 프로젝트로 위의 방법을 시도해 보셨습니까? –

+0

@Rahulgupta : 시도해 보셨습니까?. 이것은 나를위한 것이 아니라 당신을위한 것입니다. :) –

+0

답장을 보내 주셔서 감사합니다. 위의 코드를 시도했지만 iOS 7과 잘 작동하지 않는 것 같습니다. autolayout이 활성화 된 Xcode6에서 생성되었습니다. –

1

이 작업을 수행해야합니다.

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    CGSize constrainedSize = CGSizeMake(self.view.frame.size.width - 30, FLT_MAX); 

    NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
              [UIFont fontWithName:@"HelveticaNeue" size:14], NSFontAttributeName, 
              nil]; 

    CGRect requiredHeight = [YourStringObject boundingRectWithSize:constrainedSize 
                     options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) 
                    attributes:attributesDictionary 
                     context:nil]; 

    return requiredHeight.size.height + 20; 
} 

추가 여백에는 20을 더 사용합니다. 이것이 당신을 위해 잘되기를 바랍니다.

+0

iOS7에서 Xcode6으로 생성 된 프로젝트로 작업하지 않습니다. –

관련 문제