在UIView中具有不同高度的各种自定义单元格的UITableView

时间:2013-11-07 11:10:46

标签: ios objective-c xcode uitableview

我正在构建一个IOS应用程序主页,它基本上由以下结构组成 -

enter image description here

这基本上是一个UIView,它包含一个嵌套的UIScrollView,其中包含一个带有3个自定义单元格的TableView。

我从动态数组中提取数据并将其过滤到相关的单元格中 - 除了我无法解决的两个问题之外,一切正常 -

1-自定义单元格在故事板中的高度不同但是在编译应用程序时它们总是相同的高度 - 是否可以在UITableView行上设置自动高度?如果没有,任何人都可以解释我如何为每个细胞应用正确的高度?

2-包装表视图的TableView / View需要扩展以使所有动态单元格可见 - 我该如何实现?

下面是我的tableview方法供参考 -

-(UITableViewCell *)tableView:(UITableView *)tableView
    cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier =@"CellFeed";
    static NSString *CellIdentifierArtNo =@"CellArtRecNo";
    static NSString *CellIdentifierBook =@"CellBooking";
    UITableViewCell *cell;
    feedData *f = [self.HpFeedArray objectAtIndex:indexPath.section];

    NSString * ArtPString = @"articleP";
    NSString * ArtNoPString = @"article";
    NSString * ArtBook = @"booking";

    if([f.FeedGroup isEqualToString:ArtPString]){
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier  
                                               forIndexPath:indexPath];
        CellHp_RecArticleWithImage *cellImage = (CellHp_RecArticleWithImage *)cell;
        cellImage.selectionStyle = UITableViewCellSelectionStyleNone;
        cellImage.artTitle.text = f.FeedTitle;
        cellImage.artImg.text = f.FeedDesc;
        cellImage.artDate.text = f.FeedDate;
        cellImage.textLabel.backgroundColor=[UIColor clearColor];

        return cellImage;
    }
    if([f.FeedGroup isEqualToString:ArtBook]){
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifierBook 
                                               forIndexPath:indexPath];
        CellHp_BookingAlert *cellBook = (CellHp_BookingAlert *)cell;
        cellBook.selectionStyle = UITableViewCellSelectionStyleNone;
        cellBook.HeadlineLbl.text = f.FeedTitle;
        cellBook.TextBoxLbl.text = f.FeedDesc;
        //cellBook.DateLbl.text = f.FeedDate;

        return cellBook;
    }
    else{
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifierArtNo 
                                               forIndexPath:indexPath];
        CellHp_RecArticleNoImage *cellNoImage = (CellHp_RecArticleNoImage *)cell;
        cellNoImage.selectionStyle = UITableViewCellSelectionStyleNone;
        cellNoImage.artTitle.text = f.FeedTitle;
        cellNoImage.artImg.text = f.FeedDesc;
        cellNoImage.artDate.text = f.FeedDate;
        cellNoImage.textLabel.backgroundColor=[UIColor clearColor];

        return cellNoImage;
    }

干杯

3 个答案:

答案 0 :(得分:1)

您需要实现以下方法来识别细胞的高度。

- (CGFloat)tableView:(UITableView *)tableView 
  heightForRowAtIndexPath:(NSIndexPath 
   *)indexPath;

答案 1 :(得分:1)

看起来你有自定义的UITableViewCell子类,如CellHp_RecArticleNoImageCellHp_BookingAlert(我可以建议将它们重命名为不那么令人头疼的东西吗?;))。

在这种情况下,如果您只有3种不同的细胞类型,则可以这样做:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
    UITableViewCell* cell = [tableView cellForAtIndexPath:indexPath];

    if ([cell isKindOfClass:[CellHp_BookingAlert class])
    {
         return 123.0;
    }
    else if ([cell isKindOfClass:[CellHp_RecArticleNoImage class])
    {
         return ...
    }
     ...
}

或者,您可以使所有自定义类实现height方法以获得更清晰的解决方案,而在heightForRowAtIndexPath:中,您可以获取单元格并调用其高度方法。

重新。问题2,使用Tim提到的UIView's sizeToFit method

答案 2 :(得分:0)

  1. 您可以根据此处列出的步骤,在heightForRowAtIndexPath中将故事板中的静态或动态(数据驱动)单元格高度导出:Retrieve custom prototype cell height from storyboard?

  2. 我不确定我是否理解这个问题,但是如果您尝试调整表格大小以适应内容,则可以获得表格视图的contentSize

    < / LI>