我在IB中创建了一个自定义UITableViewCell,将其链接到根视图控制器的属性,然后在CellForRowAtIndexPath中进行设置。但我绘制的细胞的高度与我在IB中建立的高度不一样,建议?这是一些截图和代码。
- (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的表视图编程指南中的示例。
答案 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)