2014-12-18 2 views
1

Я использую Xcode 6 и создал новый проект и получаю проблему с автозагрузкой в ​​iOS7, поскольку он правильно работает в iOS8. Я использую ниже код: -Как сделать динамическую высоту UIlable в UItablview Cell в iOS 7 с помощью 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; 
} 

Мое требование только что этикетка должна взять высоту динамически контент, предоставленный ему в прошивке 7.

+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; 
} 

Здесь вы должны дать высоту или ширину по умолчанию и текстовый шрифт метки. Также установите Это на ваш TableView heightForRowAtIndexPath метод ..

+0

Уже реализованный и выше метод findTextHeight не полезен в соответствии с реализацией автоматического макета. –

+0

Я думаю, что в iOS7 с Autolayout дается метод, и нам не нужно явно вычислять. –

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

Пробовали ли вы метод выше с проектом, созданным в XCode 6 с iOS7? –

+0

@Rahulgupta: вы пробовали ?. это для вас не для меня. :) –

+0

Спасибо за ваш ответ. Я пробовал код выше, но кажется, что он плохо работает с iOS 7, созданным на 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

Не работает с проектом, созданным с помощью Xcode6 в iOS7 –

Смежные вопросы