2014-01-06 2 views
0

Я использую xib для создания пользовательской ячейки. Я хочу отображать метку, в зависимости от текста ярлыка. Как увеличить высоту строки, а также высоту надписи?Как увеличить высоту строки в iphone?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    customCell *cell=(customCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[[NSBundle mainBundle]loadNibNamed:@"customCell" owner:self options:nil]objectAtIndex:0]; 
     UIImage *userimage=[self getUserImage:[userimageURLS objectAtIndex:indexPath.row]]; 
     cell.userImageViewIv.autoresizesSubviews=YES; 
     cell.userImageViewIv.image=userimage; 
     cell.userNameLbl.text=[UserName objectAtIndex:indexPath.row]; 
     cell.commenttxtlbl.text=[postText objectAtIndex:indexPath.row]; 
     NSLog(@"cell created"); 
    } 
    return cell; 
} 

Переменный массив посттекста не является статическим. Это динамично.

Я использовал приведенный выше код.

+0

Что вы пишете в heightForCell? – Nirmalsinh

+1

Если его> = iso7 ссылается на это ** - tableView: оцененныйHeightForRowAtIndexPath: ** https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDelegate_Protocol/Reference/Reference.html # // apple_ref/occ/intfm/UITableViewDelegate/tableView: measuredHeightForRowAtIndexPath: – CoolMonster

ответ

0

Dynamic

- (CGFloat)tableView:(UITableView *)tableView 
    heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *attribValue = stringToBeWrittenInTheCell; 

    CGFloat labelWidth = WidthOfTheCellLabel; 

    titlelblSize = [attribValue 
    sizeWithFont:[UIFont 
    boldSystemFontOfSize: FontSize 
    constrainedToSize:CGSizeMake(labelWidth,labelHeight) 
    lineBreakMode:UILineBreakModeWordWrap]; 

    [attribValue release]; 
    attribValue = nil; 

    return titlelblSize.height; 

} 

статическая

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
     return 71.0; 
    } 

или с помощью раскадровки/XIV

enter image description here

0

вы можете сделать это двумя способами ....

1.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return 80; 
} 

2.

[tableview setRowHeight:80]; 
+0

он просит динамическую высоту. –

1
CGSize textSize = [myText sizeWithFont: LableFont 
         constrainedToSize:CGSizeMake(LABLE_WIDTH, CGFLOAT_MAX) 
          lineBreakMode:UILineBreakModeWordWrap]; 

использовать эту функцию, чтобы рассчитать потребность размера для вашей этикетки, а затем установить новую рамку для этого ярлыка.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGSize textSize = [myText sizeWithFont: LableFont 
          constrainedToSize:CGSizeMake(LABLE_WIDTH, CGFLOAT_MAX) 
           lineBreakMode:UILineBreakModeWordWrap]; 
return textsize.height+somefixvalue; 
} 
+0

constrainedToSize устарел, вы должны использовать: boundingRectWithSize: options: attributes: context: – YoCoh

0

Для получения правильного использования высоты метод NSString -boundingRectWithSize: Варианты: атрибуты: контекст:

Используйте его в 2-х местах: cellForRowAtIndexPath и heightForRowAtIndexPath.

В cellForRowAtIndexPathThen установите высоту кадра метки на высоту, полученную из этого метода, выполняемого по определенному тексту для этого indexPath.

В heightForRowAtIndexPath, используя тот же подход, задайте высоту, используя тот же метод, который выполняется по определенному тексту для этого indexPath.

0

Я ценю всех вас, но одно дело sizeWithFont теперь устаревшее в IOS 7. для IOS 7 вобще ниже

-(CGRect)sizeOfText:(NSString *)str 
{ 
    return [str boundingRectWithSize:CGSizeMake(LABEL_WIDTH, LABEL_MAX_HEIGHT) options:NSStringDrawingUsesFontLeading|NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont fontWithName:@"YourLabelFontName" size:16.0f]} context:Nil]; //instead of 16.0f put your Label font size 
} 


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // include the below code with yours 
    CGRect stringRect=[self sizeOfText:(NSString *)[postText objectAtIndex:[indexPath row]]]; 
    float labelHeight=stringRect.size.height; 
    return labelHeight + 100.0f; // here 100.0f is default change it according to your cell height 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // include the below code with yours 
    NSString *commentString=[postText objectAtIndex:indexPath.row]; 
    CGRect stringRect=[self sizeOfText:commentString]; 
    cell.commenttxtlbl.text=commentString; 
    CGRect newRect=CGRectMake([cell.commenttxtlbl frame].origin.x, [cell.commenttxtlbl frame].origin.x, stringRect.size.width, stringRect.size.height); 
    [cell.commenttxtlbl setFrame:newRect]; 
} 

надеюсь, что это полезно для всех вас ..

0

Try эти

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    MessageConversation *message = [marrMessage objectAtIndex:indexPath.row]; 

    CGSize szMaxCell = CGSizeMake(220, 2999); 
    UIFont *font = [UIFont systemFontOfSize:14.0f]; // whatever font you're using to display 
    CGSize szCell = [message.message sizeWithFont:font constrainedToSize:szMaxCell lineBreakMode:NSLineBreakByWordWrapping]; 
// NSLog(@"szCell %@",NSStringFromCGSize(szCell)); 
    if(szCell.height > 120){ 
     return szCell.height+100; 
    } 
    return 150; 
} 

использовать также тот же в CellforRowAtIndexpath

rightCell.lblMessage.numberOfLines = 0; 
CGSize szMaxCell = CGSizeMake(220, 2999); 
UIFont *font = [UIFont systemFontOfSize:17.0f]; // whatever font you're using to display 
CGSize szCell = [message.message sizeWithFont:font constrainedToSize:szMaxCell lineBreakMode:NSLineBreakByCharWrapping]; 

CGRect lblFrame = rightCell.lblMessage.frame; 
lblFrame.size.height = szCell.height; 
rightCell.lblMessage.frame = lblFrame; 

Замените название своей метки lblMessage. и все готово.

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