2013-02-15 60 views
2

如果我正在自定義UITableViewCell,我需要它有一個變量高度取決於輸入的長度(例如,對於Twitter閱讀器或某物),我怎麼能做到這一點工作?heightForRowAtIndexPath與自定義單元格和標籤

我發現了很多其他的例子,可以爲標準的非自定義單元格設置它,但是我的單元格的主要文本標籤更小等等,所以當我嘗試使用這些方法中的任何一種時我的單元格,他們給出了各種奇怪的結果(文本重疊在單元格的底部等)

是否有一個標準化的單元設計方法(例如,我應該在Interface Builder中做多大?) ,假設我的標籤是單元格寬度的一半。我將如何去計算單元格需要顯示加載到該標籤中的字符串的高度?這裏有一個我在這裏找到的方法,它可以在正常單元格上正常工作,但是會將怪異高度,重疊文本等自定義單元擰緊:(我完全不知道300/200000在這裏做什麼,如果有人能解釋我' d是感激,太!)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    CGSize textSize = {300.f, 200000.0f}; 
    CGSize size = [[_quoteStringsFromPlist objectAtIndex: indexPath.row] sizeWithFont: [UIFont systemFontOfSize:12.0f] constrainedToSize: textSize lineBreakMode: NSLineBreakByWordWrapping]; 
    size.height += 5.0f; 
    float result = MAX(size.height, 32.0f); 
    return result; 
} 
+0

您可以在界面生成器中完成所有操作(如果您使用的話)。在IB中選擇tableview並更改行高。然後選擇單元格並選擇自定義單元格高度並輸入相同的數字。希望能幫助到你! – Groot 2013-02-15 12:36:21

+0

恐怕這沒有奏效。細胞似乎處於不同的高度,但短小的細胞上方/下方有大量空間,而較長的細胞正在被切斷。我在兩個地方將行高設置爲90。 – Luke 2013-02-15 12:43:26

回答

0

這樣的事情應該工作。

CGRect labelFrame = // enter default frame of the label here 
UIFont *labelFont = // enter label font here 
CGFloat labelBottomMargin = // enter the space between the bottom of the label and the bottom of the cell here 

CGSize size = [labelString sizeWithFont:labelFont constrainedToSize:CGSizeMake(labelFrame.size.width, MAX_FLOAT)]; 
size.height += labeFrame.origin.y; 
size.height += labelBottomMargin; 
size.height = MAX(size.height, 32.0f); 
return size.height; 
+0

這使得他們都太高,就像他們需要的高度的兩倍以上。 – Luke 2013-02-15 13:05:33

+0

另外,32.0f從哪裏來? – Luke 2013-02-18 17:53:22

+0

它來自你。從你原來的代碼中,我認爲32.0f是你想要的單元格的最小高度。如果您爲labelFrame,labelBottomMargin和labelFont輸入了正確的值,我提供的代碼應該可以正常工作。 – user941868 2013-02-20 13:11:09

0

首先,頭部到您的XIB文件,看看有多大的文本區域的頂部/底部的空白,並有多寬它。

之後,您需要使用可用寬度計算所需的高度,然後將該值添加到文本區域已有的頂部/底部邊距。

無論IB中每個單元格的大小或您嘗試放入其中的文本的大小如何,結果都應該正確顯示。

編輯

想象一下你的尺寸爲您的IB {700, 300},和你的文本區域位於{{100, 100}, {300,100}},文本區域有一個100px的保證金頂部和100px的保證金機器人,它的寬度是300

當您計算文本所需的高度時,可以用可用的300寬度進行計算。它會返回一個大小,例如{300,250}。這是你的文本所需的高度,但你的單元格中有其他東西,你需要添加這些頂部和機器人邊距,所以結果是450.

請記住設置一個自動調整掩碼或自動佈局您的文本區域垂直延伸和邊距固定(UIViewAutoresizingFlexibleHeight

+0

你能舉個例子嗎?我根本沒有真正關注這個。故事板中的我的文本區域寬度爲159,高度爲74(如果這很重要,則爲X 234和Y 45)。我不確定你的利潤是什麼意思。 – Luke 2013-02-15 12:40:40

+0

什麼是文本邊距屬性的名稱? – AlexWien 2013-02-15 12:46:00

+0

我不知道什麼自動調整口罩。我很抱歉在這裏成爲一個問題,但我仍然不知道你的意思是這個答案。 – Luke 2013-02-15 13:08:09