2016-09-02 9 views
0

基本的に、私は10のラベルを持つセルを持っていますが、現在はその高さを300に固定しています。しかし、ラベルに値がある場合とない場合があり、ラベルに特定の値がない場合は、それぞれのラベルごとにヌル状態をチェックしてから、同じように高さを調整するのは時間がかかり、面倒です。私が探しているものを達成するための他の方法はありますか? enter image description hereコンテンツに合わせてカスタムUITableViewCellのサイズを変更するにはどうすればよいですか?

+1

使用すると、テーブルビューセルにあなたのラベルのすべてを拘束するように自動レイアウト。次に、テーブルビューデリゲートで、 'heightForRowAt'と' estimatedHeightForRowAt'の 'UITableViewAutomaticDimension'を返します。これらのことが適切に行われると、表/セルがあなたのサイジングを処理します。 – keithbhunter

+0

すべてのラベルをtableviewcellに制限する??あなたはこれを詳しく教えてもらえますか? –

+0

autolayoutの使い方をお読みください。それはあなたが必要とするものです。 [Appleのウェブサイトに関する記事](https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/)と[Ray Wenderlichチュートリアル](https://www.raywenderlich.com/115440/自動レイアウト - チュートリアル - ios-9-パート-1-開始 - 2)。 – keithbhunter

答えて

1

これは私が示唆している考えの例です。これがあなたのために最適化されたものを見つけるのを助けてくれることを願っています。

私が引き受ける場合は、データソースは、このようなものです:

// array of arrays of strings 
var Array : [[String]] = [ 
    ["Label1", "Label2", "Label3", "Label4"], 
    ["Label1", "Label2"], 
    ["Label1", "Label2", "Label3", "Label4", "Label5", "Label6"], 
] 

これらのメソッドを実装することができます

func calculateExpectedHeight(withItemsCount: Int) -> CGFloat 
{ 
    let titleHeight = 32.0 // this is e.g. your Layer Conf. label 
    let itemHeight = 18.0 // this is for a label unit that is repeating 

    return CGFloat(titleHeight) + CGFloat((Double(withItemsCount) * itemHeight)) + 12.0 //twelve is just for tuning 
} 

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    let dataForThisRow = Array[indexPath.row] 
    return calculateExpectedHeight(withItemsCount: dataForThisRow.count) 
} 
関連する問題