自定义笔尖UITableViewCell高度

时间:2011-01-06 02:00:58

标签: iphone objective-c uitableview

我在IB中创建了一个自定义UITableViewCell,将其链接到根视图控制器的属性,然后在CellForRowAtIndexPath中进行设置。但我绘制的细胞的高度与我在IB中建立的高度不一样,建议?这是一些截图和代码。 alt text

alt text

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *AddressCellIdentifier = @"AddressCellIdent";

    UITableViewCell *thisCell = [tableView dequeueReusableCellWithIdentifier:AddressCellIdentifier];
    if (thisCell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"AddressCell" owner:self options:nil];
        thisCell = addressCell;
        self.addressCell = nil;
    }

    return thisCell ;
}

addressCell是@property(非原子,赋值)IBOutlet UITableViewCell * addressCell;,并在IB中链接到文件的所有者(表视图控制器)。

我正在使用Apple的表视图编程指南中的示例。

6 个答案:

答案 0 :(得分:7)

IB中有两个位置需要设置行高。首先是单元格本身的自定义行高。单击要调整大小的单元格,然后单击右侧“实用工具”窗口中的“大小”检查器(标尺)。在“表视图单元格”部分下方的行顶部设置行高。单击自定义复选框。 然后单击左侧“文档大纲”窗口中的“表视图”。返回右侧“工具”窗口中的尺寸检查器,将整个工作台的行高设置为所需的高度 使用此实现,您无需向tableviewcontroller添加任何代码。

答案 1 :(得分:6)

您可以使用以下方法调整单元格的高度:

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

    CGFloat result;
    result = 120.0f;
    return result;
}

这适用于自定义单元格。

答案 2 :(得分:5)

正如WrightsCS所说,delegate's -tableView:heightForRowAtIndexPath: method是一种方法。如果所有行的高度相同,则另一个选项是设置rowHeight property of the table view本身。 (前者的优点是可以让你为每一行返回任意值。)

答案 3 :(得分:2)

这是我在创建表视图时所做的,以确保行高与单元格的nib中定义的行高相匹配:

- (UITableView *)tableView
{
    if (_tableView == nil) {
        _tableView = [[UITableView alloc]
                      initWithFrame:self.view.bounds
                      style:UITableViewStylePlain];
        _tableView.dataSource = self;
        _tableView.delegate = self;

        [_tableView
         registerNib:[UINib nibWithNibName:@"<CELL NIB NAME>" bundle:nil]
         forCellReuseIdentifier:kCellIdentifier];

        // Get the cell's root view and set the table's 
        // rowHeight to the root cell's height.
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"<CELL NIB NAME>"
                                                     owner:self
                                                   options:nil];
        UIView *cellView = (UIView *)nib[0];
        if (cellView) {
            _tableView.rowHeight = cellView.bounds.size.height;
        }        
    }
    return _tableView;
}

我希望这会有所帮助。

答案 4 :(得分:1)

我正在使用以下代码段。 nib文件中的高度。

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

   if (indexPath.row == 0) {
      return self.cell0.contentView.bounds.size.height;
   }
   if (indexPath.row == 1) {
      return self.cell1.contentView.bounds.size.height;
   }
   if (indexPath.row == 2) {
      return self.cell2.contentView.bounds.size.height;
   }

   return 44.0;
}

不要忘记在 - (void)viewDidLoad

中加载单元格
[[NSBundle mainBundle] loadNibNamed:@"YourView" owner:self options:nil];

答案 5 :(得分:0)

对于仍对替代答案感兴趣但又不想实施heightForRowAtIndexPath的人们来说,好消息:)。

您可以这样在de xib中设置行高:

enter image description here

这还不够。实际上,这将在运行时被完全忽略。解决方案是通过设置单元格内容的顶部和底部约束来设置中心尺寸。内容将推动容器的顶部和底部,这将导致更高的单元格:)。

enter image description here