2016-11-24 7 views
1

私はUITableViewを持っていて、ユーザが利用できるすべての異なるHomeKitデバイスをリストしています。(Swift)UITableViewの高さをTableViewCellsの動的な量から変更する方法を設定しますか?

明らかに、デバイスがどれだけあるか知る方法がないため、ストーリーボードの高さをUITableView'sに変更する必要があります。

私はviewDidLoad()機能に呼んで、これを試してみた:

func adjustHeightOfTableView() { 

    //getting the height of the tableview 
    var tableHeight = self.tableView.contentSize.height 

    //the height of the content inside the view 
    var maxHeight = self.tableView.superview?.frame.size.height 


    //if the height of the content is bigger then the height of the tableview 
    if (maxHeight! > tableHeight) { 

     tableHeight = maxHeight! 
     //set the tableview height to be the content height 

    } 

    //trying to reload the tableview height? 
    self.view.layoutIfNeeded() 
    self.tableView.reloadData() 

} 

私はテーブルビューの下に、いくつかのUI要素を持ってしようとしている、と私は彼らがの下から、設定されたスペースになりたいですtableviewだけでなく、それが必要な高さにtableviewを持っていても、どのような数のセルがあってもかまいません。

しかし、それは機能していません。 私が何か悪いことをしている場合、または誰かがこの作業を行う方法を知っている場合は、私に知らせてください。 ありがとう!あなたは、ビューdidloadにautolayouts

を使用している場合

+0

画面のセル数が少なく空白セルが表示されている場合、tableViewの高さを下げたいですか? –

+0

'tableHeight = maxHeight!'はtableViewの高さを設定せず、変数の値だけを設定します。 tableView自体のフレームを変更する必要があります。例えば、 'self.tableView.frame = CGRectMake(...)' –

+2

どうして高さを変えたいのですか?ポイントは何ですか?テーブルの下部にある空白を取り除くだけですか?代わりにその色を透明にしてみませんか?または、他のUI要素をその領域を占有するようにシフトさせたいですか? –

答えて

1

[自動寸法を使用することができます。

let nib = UINib(nibName: "YOURCELLNIB", bundle: nil) 
     tableView.registerNib(nib, forCellReuseIdentifier: "REUSEIDENTIFIER") 
     tableView.rowHeight = UITableViewAutomaticDimension 
tableView.estimatedRowHeight = 140 

は、あなたのコード内の関数

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) 
0

を削除し、あなたが持っている:

tableHeight = maxHeight! 
    //set the tableview height to be the content height 

しかしこれはテーブルの高さを変更することはありません。以前のテーブルの内容の高さの値が割り当てられていた変数のみが変更されます。あなたのコードのどこにも、テーブルの高さを変更するために何もしません。

テーブルの高さを直接変更する方法の1つは、フレームの高さを除いて、古いフレームの値を完全に新しいフレームに割り当てることです。

(あなたが必要とする他のどのようなロジックの追加)このような何かを試してみてください:

oldFrame = self.tableView.frame 
newHeight = rowCount * rowHeight 
self.tableView.frame = CGRectMake(oldFrame.origin.x, oldFrame.origin.y, oldFrame.size.width, newHeight) 
2

注:このアプローチのためにあなたが手の前にいただきました!総静的セルの高さを持っているか知る方法を把握する必要がありますcontentsize高さ

あなたUITableViewに制約を以下の作成、制約を使用していると仮定すると、(先頭と末尾から離れて!)

は、高さ制約のwiを追加します。 750の優先順位と>= 0になると1000の優先順位は、あなたが今、あなたのUIViewController

で作成し、この高さの制約のための出口を作成していますあなたのスーパービューに0の下の間隔の制約を、番目

func adjustHeightOfTableView() { 

    //set the height to be equal to the number of elements multiplied by the height of each cell. 
//or use some logic that allows you to know what content size or space the cells will occupy! 
    tableViewHeightConstraint.constant = dataArray.count * rowHeight  

    view.layoutIfNeeded() 
} 

UITableViewの高さがスーパービューよりも小さい場合は問題ありません。しかし、画面の境界よりも大きければ、高さの制約が破られ、フルスクリーンになり、UITableViewと予想どおりにコンテンツが正常に表示されます!

編集: あなたは何ができるかUIAutomaticRowDimensionsを使用している場合でも、あなたのUITableViewにプログラム的制約を追加です。すなわち

他のすべてのビューには、依然としてUITableViewにボトムの制約があります。 ストーリーボードにUITableViewを作成し、通常の先頭、末尾、上、下をスーパービューにします。データを取得します。 UITableViewのcontentSizeを取得し、下部の制約を削除します。次に、UIScreen.main().bounds.size.heightcontentSizeの最小値になる高さ制約を追加します。

関連する問題