无法在tableview中为我的自定义原型单元提供不同的高度

时间:2014-06-05 02:14:39

标签: ios objective-c cocoa-touch uitableview

我已经在网上查看了其他问题以及许多其他在线资源,但无法找到解决方案。我有3行,无论我做什么,它们都保持在tableview中定义的宽度。第一个是我想要的,但第二个和第三个我不能给出自定义高度。

以下是我的代码:

#import "DetailTableViewController.h"
#import "EventDetailTableViewCell.h"
#import "EventDescriptionTableViewCell.h"
#import "EventMapTableViewCell.h"

@interface DetailTableViewController ()
@end

@implementation DetailTableViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 3;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 0) {
        static NSString *CellIdentifier = @"headerCell";
        EventDetailTableViewCell *headerCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        headerCell.headerImage.image = [UIImage imageNamed:@"img4.png"];

        return headerCell;

    } else if (indexPath.section == 1) {
        static NSString *CellIdentifier = @"descriptionCell";
        EventDescriptionTableViewCell *descriptionCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        descriptionCell.descriptionImage.image = [UIImage imageNamed:@"img2.png"];

        return descriptionCell;

    } else {
        static NSString *CellIdentifier = @"mapCell";
        EventMapTableViewCell *mapCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        return mapCell;
    }
}

#pragma mark - Helper Methods

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    if (section == 1) {
        return @" ";
    } else if (section == 2) {
        return @" ";
    } else {
        return nil;
    }
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0) {
        return 222;
    } else if (indexPath.row == 1) {
        return 80;
    } else {
        return  100;
    }
}
@end

1 个答案:

答案 0 :(得分:2)

我认为heightForRowAtIndexPath中的代码存在错误。您一直在为大多数TableView委托和dataSource方法使用indexPath.section。所以,我相信您也想在indexPath.section上使用heightForRowAtIndexPath

以下代码应该有效。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  if (indexPath.section == 1) {
    return 222;
  } else if (indexPath.section == 2) {
    return 80;
  } else {
    return  100;
  }
}