2016-11-15 95 views
0

我想製作一個UITableViewController具有不同的單元格大小和不同的單元格內容。UITableViewController具有不同的單元格大小和Storyboard中的單元格內容

例如:

Example Storyboard

是否有使用AutoLayoutStoryboard內定義TableViewCells的大小不同的方式?定義TableViewCells的內容(帶有內容的UIView)的最佳方式是什麼?

+0

您可以使用具有不同識別符的不同單元格。 – KKRocks

+0

我知道,我也是這麼說的,至少從哪個定製的細胞類來說。但我無法改變細胞的大小。 – user6867907

+0

請問清楚你想要什麼?如果您嘗試過任何操作,請在此處添加代碼。 – KKRocks

回答

2

要改變的UITableView的細胞,你有兩個選擇:

選項A(最好)是使用自動調整大小的TableView細胞與自動佈局約束。

要使用選項A,你需要確保你的內容查看有明確的頂部&底部(在這裏看到我的形象)約束,以在內容查看所有的UI元素爲例:

Autosizing UITableViewCell

標題UILabel具有超視圖(Cell ContentView)的頂部空間和與SubTitle的垂直間距。 SubTitle對superview(Cell ContentView)也有一個底部空間約束。

這允許單元格自動化,因爲我的UI元素對內容視圖具有頂部的約束。

最後一步,使自動調整大小是設置在您的UITableView這2個屬性:

self.tableView.estimatedRowHeight = 60.0; 
self.tableView.rowHeight = UITableViewAutomaticDimension; 

estimatedRowHeight值應儘可能靠近你可以猜測其真實尺寸,這有助於加快計算了一下。

選項B是將- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;委託添加到您的UIViewController。

你應該手動提供單元的高度。 如果您只使用2個不同的細胞,2米固定的高度,您可以使用方案B,以及有你添加一個邏輯來檢測細胞和返回的高度...

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    if ([cell isKindOfClass:[MyCustomCellTypeAClass class]]) { 
     return 44; 
    } 
    else { 
     return 100; 
    } 
} 
0

如果您正在使用自動 - 佈局,高度將使用約束來計算(如果您正確設置);你必須使用代理方法如下 -

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 
相關問題