2015-12-14 79 views
3

我有一個自定義UITableViewCellUILabel有多個行。我試圖實現一個擴展/縮進功能,以便當標籤只有一行時,當您點擊單元格時不會發生擴展,但如果標籤是多行,則該單元格可以在點擊時展開/收縮。我得到了擴展和承包工作,但我不知道如何使它的工作基於UILabel中的行數。基於UIlabel行數擴展tableviewcell

這是目前我正在做的細胞擴增,但它根本不是基於UILabel

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

    if (indexPath.row == self.selectedRow?.row && self.expand == true) 
    { 
     self.previousRow = self.selectedRow?.row 
     return 200 
    } 
    else if(self.previousRow == self.selectedRow?.row && self.expand == false){ 
     return 65 
    }  
    return 65 
} 
+0

既然你有自定義單元格物品,再加入自來水手勢識別到標籤,然後當上了項目的用戶點擊,它會檢查車況,如果條件匹配,則擴展或合同。 – casillas

+0

你也可以檢查標籤中有多少行,檢查這個線程http://stackoverflow.com/questions/4172615/how-to-find-uilabels-number-of-lines – casillas

+0

@casillas我喜歡手勢識別選項,但它可能不夠直觀。我沒有使用'didSelecRowAtIndexPath'做任何事情,所以我不妨使用它。我查看了您提供的鏈接,但由於這是一個tableviewcell,我應該在哪裏訪問單元格標籤大小?在cellForRowAtIndexPath中沒有意義,對嗎? – Brosef

回答

3

您可以使用表格視圖動態細胞與自動版式大小與的UILabel的numberOfLines屬性結合擴大和壓縮單元。

溶液的心臟是這樣的:

tableView.beginUpdates() 
label.numberOfLines = label.numberOfLines == 0 ? 1 : 0 
tableView.endUpdates() 

這實質上觸發在桌子上的動畫和切換從0行數(任意數量的線),以1行。 Autolayout正在休息。

我認爲這比手動更新身高指標更好。完整的示例項目可以在我的github上可以找到:https://github.com/rayfix/MultilineDemo

demonstration

+0

我真的很喜歡這個技巧 – sage444

+0

這樣做的確如此。這種優雅的解決方案。 – Brosef

+0

你救了我的命,非常感謝你! – OtakuFitness

0

您可能需要自己測量文本,因爲標籤在展開前不會有更多行。

像這樣的東西(100000只是需要一個大數目)

CGSize textSize = [self.label.text sizeWithFont:self.label.font constrainedToSize:CGSizeMake(self.label.bounds.width, 100000) lineBreakMode: UILineBreakModeWordWrap]; 
+0

你會在cellForRowAtIndexPath中做到這一點? – Brosef

+0

FLT_MAX可以在這裏使用 –

+0

我會在'heightForRowAtIndexPath'中做到這一點。也許你在這種情況下不需要使用標籤。希望你知道文字,寬度和字體。 –