2016-11-15 94 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 
} 
相关问题