2017-03-14 20 views
3

我們的UITableView存在於ViewController(而不是TableViewController)上。我們在運行時用兩行填充它。當我們設置高度限制時,表格顯示正常。當我們不要設置高度限制時,表格完全不會出現。你如何設置UITableView來動態設置其高度?iOS:在Swift中動態設置UITableView高度

我已經看到有關動態設置行高度(哪個工作正常)的線程,但不是關於實際的表高度。在這個特定的點上有幾條線索,但沒有一條適合我。在解決方案


更新:由於機器人貓建議我們在故事板設置了高度約束的UITableView(我們有這樣的話),然後做Ctrl拖動來創建我們的控制器的IBOutlet。執行我們在同樣的方法來填充我們的表調用reloadData()上面的代碼之前

tableViewHeightConstraint.constant = tableView.contentSize.height 

注:從那裏,我們執行以下代碼在viewWillAppear每維涅什的答案。

+1

約束只是另一個可以通過IBOutlet引用的對象。在Storyboard中設置視圖控制器約束,然後在UIViewController子類(或者控制UITableView高度的約束,就像到屏幕底部的距離一樣)創建UITableView高度約束的出口。然後爲高度設置適當的值(如固定值或屏幕比例)。 –

回答

5

我們沒有UITableView的自動維度,它們隻影響UITableViewCell高度。如果你想動態設置表視圖的高度,我認爲最好的辦法是在表視圖完成加載後,將表視圖高度約束設置爲等於其內容大小。我的意思是,

tableViewHeightConstraint.constant = tableView.contentSize.height 
+0

請記住,如果contentSize.height小於視圖高度,則可以。 如果你知道你總是隻有兩個單元格,並且它們的高度始終相等,tableView可能不是必需的,你可以有一個簡單的UIView。 – silentBob

+1

@silentBob。我同意謝謝,但我認爲這是顯而易見的,而且馬庫斯也不會問這個問題,即表視圖的大小是否曾經跨過視圖的高度。爲了完成,可以通過在MIN(contentSize,viewSize)中包裝來很容易地解決這個問題。 – Vignesh

+0

謝謝。將來我們可能會有三到四行等,如果我們這樣做,我將使用min函數。我們使用表視圖,而不是簡單的UIView,因爲我們希望每個單元具有完全相同的佈局。我不知道如何在沒有表格的情況下將佈局「克隆」到不同的行(如果這是有道理的..)。 –

1

您可以以多種方式改變的tableView框架,與動畫等

tableView.frame = CGRect(x: leftTableBorder, y: topTableBorder, width: tableWidth, height: tableHeight) 

或者你可以改變的tableView相關的約束條件,然後更新的約束與layoutIfNeeded,如果你願意也動畫。

例如,如果你有一個高度約束屬性:

tableViewHeightConstraint.constant = desiredHeight 

layoutIfNeeded() 

在任何情況下,需要限制,所以自動佈局如何呈現表。