IOS - 静态UITableViewCell - 返回当前高度

时间:2014-01-22 12:07:15

标签: ios objective-c uitableview

我正在尝试使用静态UiTableViewController构建表单 - 我想实现IOS7显示方法来显示UIPickerView / UidateView内联,但由于表是静态的而不是动态的,因此证明是有问题的。

无论如何 - 我在这个问题中遵循了Aaron Bratcher的解决方案 - iOS 7 - How to display a date picker in place in a table view? -

看起来它非常合适 - 我唯一的问题是我的表格单元格具有不同的高度 - 所以我需要为日期选择器行返回200或0的高度 - 但是对于其他一切他们需要保持其当前状态身高 - 我不确定这是编码的最好方法 - 我需要引用当前的单元格并且基本上说除非你的pickerRow保持原样吗?

这是我到目前为止所得到的 -

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.section == 5 && indexPath.row == 1) { // this is my picker cell
        if (_editingStartTime) {
            return 220;
        } else {
            return 0;
        }
    } else {

         UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

        //return THE CURRENT CELLS HEIGHT
    }
}

不确定我如何访问上面单元格的高度 - 甚至不知道该逻辑是否会在heightForRowAtIndexPath中执行我想要的操作?任何想法?

干杯

3 个答案:

答案 0 :(得分:1)

在静态tableView中,您可以向super询问故事板中是否存在单元格的高度。

e.g:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    /* ... */
    else {
        CGFloat height = [super tableView:tableView heightForRowAtIndexPath:indexPath];
        return height;
    }
}

对于其他dataSource方法也是如此,因此您也可以从- tableView:numberOfRowsInSection:中删除一些代码。

答案 1 :(得分:0)

尝试

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 5 && indexPath.row == 1) { // this is my picker cell
    if (_editingStartTime) {
        return 220;
    } else {
        return 0;
    }
} else {
   return self.tableView.rowHeight;
}

}

答案 2 :(得分:0)

UITableViewCell类是UIView的子类,因此它基本上是一个具有自己的框架的视图。如果您告诉表格视图单元格保持原样,则应访问其框架属性:

return cell.frame.size.height;

但是如果你想让那个特定的细胞具有与其他细胞相同的高度,你应该

return tableView.rowHeight;
正如左轮手枪所说的那样。您可能已经从Interface Builder设置了rowHeight属性,或者您可以在代码中明确设置它。