对于不同大小的类,是否可以具有不同的表视图单元行高?

时间:2015-03-16 21:49:40

标签: ios uitableview

我正在开发一个具有自适应布局的应用程序,除了我需要具有自适应表视图单元格高度之外,一切都可以工作。我正在使用故事板,并没有看到任何方法来做到这一点。这是不可能的任务吗?

1 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,您希望使用大小类将单元格高度调整为不同的字体大小;所以在更大尺寸的屏幕上有更大的字体,这将导致细胞相应调整。我认为唯一的方法是为特定大小的类安装不同的文本视图。

我做了一个测试应用来证明这一点。在故事板中,我添加了一个带有自定义单元格的表视图控制器。我将size类更改为wCompact hAny并向单元格添加了文本视图(IBOutlet:labelPhone)。我将它固定到单元格的所有4个边,禁用滚动,使文本变为红色,并将字体大小设置为8.我将大小类更改为wRegular hAny,并将另一个文本视图(IBOutlet:labelPad)添加到具有相同约束和字体大小为30的绿色文本的单元格。表视图控制器中的代码如下,

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.rowHeight = UITableViewAutomaticDimension;
    self.tableView.estimatedRowHeight = 50;
}


-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated]; 
    [self.tableView reloadData]; // this was necessary to have the cells size correctly when the table view first appeared
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 5; 
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    RDCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    NSString *theText = @"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt";

    cell.labelPhone.text = theText;
    cell.labelPad.text = theText;
    return cell;
}

当在iPhone模拟器上运行时,我得到了小红色文本,当在iPad模拟器上运行时,我得到了大的绿色文本。我将示例应用程序放在此处http://jmp.sh/WfeZ8Pi

编辑后:

实际上,我找到了一种更简单的方法。您可以使用默认的wAny hAny尺寸类添加子视图(文本视图或标签)(您不需要两个不同的视图)。在“属性”检查器中,“字体”字段旁边有一个" +"按钮。单击它,您可以为不同的大小类添加不同的字体大小。这就是你需要做的一切。然后cellForRowAtIndexPath变成这样的东西,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        RDCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
        cell.textView.text = self.theData[indexPath.row];
        return cell;
    }