【问题标题】:Get height of cell in UITableViewCell subclass获取 UITableViewCell 子类中单元格的高度
【发布时间】:2011-10-20 21:24:53
【问题描述】:

我有一个表格视图,其中的单元格是子类的。在子类中我调用了 UIView 的子类。 我已经实现了tableView:heightForRowAtIndexPath:,并想在我的子类中检索这个高度来设置我的子类 UIView 实例的高度。

有什么办法吗?

我尝试过使用self.bounds.size.heightself.contentView.frame.size.height,但这些似乎都没有给出正确的高度。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code

        textCellView = [[TextCellView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)];
        [[self contentView] addSubview:textCellView];
    }
    return self;
}

【问题讨论】:

    标签: iphone uitableview sdk height subclass


    【解决方案1】:

    在创建时,子视图尚未定位,因此您不能依赖框架。相反,请尝试将值传递给自定义表格单元格的 init 方法。没有什么说你必须使用 initWithStyle:reuseIdentifier: 方法。这是一个例子:

    - (id) initWithHeight: (CGFloat) cellHeight {
      if ((self = [super initWithStyle: UITableViewCellStyleDefault 
                       reuseIdentifier: @"MyCustomTableViewCell"])) {
        // perform all layout that needs to happen
        // use cellHeight in all the layout calculations 
      }
      return self;
    }
    

    【讨论】:

    • 啊,当然!我认为initWithStyle:reuseIdentifier 方法是默认和强制的。如果我每次滚动表格视图时都没有在表格视图中创建单元格,你能否告诉我为什么我的身高会变得一团糟?这意味着我不能使用if(cell == nil){ // Create cell }。我相信每次滚动单元格时创建单元格都会占用大量资源。我认为 Apple 在他们的示例中使用了 if(cell == nil)
    • 您的单元格是否应该具有不同的高度?如果是这样,当您选择单元格并且它不是 nil 时,您将不得不再次手动设置高度,并让它重新计算布局。如果是这种情况,您可能希望使用高度设置器而不是在 init 上设置它。随意发布代码。
    • 我不知道我的单元格的高度。我通过标签的大小、间距等来计算它。我认为最好针对这个问题提出一个新问题,因此我提出了一个关于重用可变高度单元的问题。我通过使单元格标识符变量使其工作,但我不确定这是否是这样做的方法。我在这篇文章中发布了一些代码:stackoverflow.com/questions/6962411/… 这里我不使用高度设置器,但我在 init 上设置了高度(如您的示例中所示),但我将重用具有相同高度的单元格。
    • 我已经实现了这个并且正在初始化单元格:cell = [[UITableViewCell alloc] initWithHeight:[self tableView:tableView heightForRowAtIndexPath:indexPath]]; 它就像一个动态高度的魅力!
    • 那里有点太快了。还必须使用动态 cellIdentifiers NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%f", [self tableView:tableView heightForRowAtIndexPath:indexPath]];
    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    相关资源
    最近更新 更多