2014-11-06 138 views
0

我有以下的UITableViewCell佈局,我使用的自動佈局處理這個的UITableViewCell高度自動佈局

========= 
| Image | Name Label 
|  | Short description Label 
========= 
Description Label 

這裏描述標籤是可選的,它會根據內容隱藏/顯示,我使用的計算上heightForRowAtIndexPath細胞的高度

- (CGFloat)heightForTableView:(UITableView *)tableView cell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath 
{ 
    cell.bounds = CGRectMake(0, 0, CGRectGetWidth(tableView.bounds), CGRectGetHeight(cell.bounds)); 

    [cell setNeedsLayout]; 
    [cell layoutIfNeeded]; 

    CGSize cellSize = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 

    // Add extra padding 
    CGFloat height = cellSize.height;// + 1; 

    return height; 
} 

即使我隱藏隱藏描述標籤它返回相同高度的單元格,我失蹤了什麼?

任何人都可以建議最好的方式來處理這種情況與自動佈局?

編輯1:設置空作品,但有沒有更好的方法?

+0

可以顯示計算細胞高度的完整代碼嗎? – 2014-11-06 05:24:20

+0

你在哪裏隱藏標籤?在這個方法被調用之前? – 2014-11-06 05:34:26

+0

是的,當配置它與模型 – Abhishek 2014-11-06 05:35:15

回答

0

heightForRowAtIndexPath也針對所有行調用。因此,對於您正在隱藏描述標籤的行,對於同一行,您將cat設置爲heightForRowAtIndexPath方法中的高度。

例如。 第4行您想通過檢查某些條件來隱藏描述標籤。

than heightForRowAtIndexPath您可以檢查同一行的相同條件,並且可以返回所需的高度,而不顯示說明標籤。

比方說,

if(description.length==0) 
{ 
    return 100;// description label hidden 
} 
else 
{ 
    return 140;// description label shown 
} 
+0

我已經更新了計算細胞高度的方法,我只是想讓它返回精確值 – Abhishek 2014-11-06 05:28:38

+0

忘記了計算細胞高度的方法,試試我說的。我不得不工作 – 2014-11-06 05:30:26

+0

我有很多不同的細胞,所以我不能簡單地使用 – Abhishek 2014-11-06 05:34:43

0

我建議計算每個細胞如下的高度。通過查看你的問題,我假設所有的單元格應該有相同的高度,如果沒有描述標籤,是正確的?讓我們假設它是60.所以,你需要做的是根據它的描述文本計算每個單元格的高度,並將其添加到沒有描述文本的單元格的高度。這在你的heightForTableView代表中會是這樣的。

- (CGFloat)heightForTableView:(UITableView *)tableView cell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath 
{ 
    int cellWidth = 320; // assuming it is 320 
    int constantHeight = 60; 

    NSString * str = [[yourarray objectAtIndex:indexPath.row] objectForKey:@"DescriptionKey"]; 

    int height = [self calculateHeightForText:str withWidth:cellWidth andFont:[UIFont systemFontOfSize:16]]; 
    // replace systemFontSize with your own font 

    return height + constantHeight; 
} 
// Depreciated in iOS7 
- (int)calculateHeightForText:(NSString *)string withWidth:(int)width andFont:(UIFont *)font 
{ 
    CGSize textSize = [string sizeWithFont:font constrainedToSize:CGSizeMake(width, 20000) lineBreakMode: NSLineBreakByWordWrapping]; 

    return ceil(textSize.height); 
} 
// Introduced in iOS7 
- (int)calculateHeightForText:(NSString *)string withWidth:(int)width andFont:(UIFont *)font 
{ 

    int maxHeightForDescr = 1000; 
    NSDictionary *attributes = @{NSFontAttributeName: font}; 

    CGRect rect = [string boundingRectWithSize:CGSizeMake(width, maxHeightForDescr) 
             options:NSStringDrawingUsesLineFragmentOrigin 
            attributes:attributes 
             context:nil]; 
    return rect.size.height; 
} 

我已經寫了兩種方法calculateHeightForText,一種是在貶值和iOS7工程都iOS6的少和iOS7但:第二個建議方法iOS7但不會爲iOS7工作。如果您發現一些令人困惑的事情,請告訴我,或者需要進一步的幫助。會很樂意進一步幫助。

相關問題