在iPad Retina 64bit模拟器上运行Xcode 5.1(7.1 beta),我需要将返回类型更改为“double”,当在具有7.1 beta的设备上时,我必须将其更改为“float”。如果我在不更改类型的情况下运行应用程序,则单元格高度实际为0.有没有其他人看过或遇到此问题?我无法在网上找到任何相关信息。
- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([lastSelectedIndexPath isEqual:indexPath]) {
return 310.0;
} else {
return 120.0;
}
}
答案 0 :(得分:3)
您的方法应该返回CGFloat
值,而不是float
。
答案 1 :(得分:3)
您只需要替换
中的方法行-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
//^^^^^ The return type is incorrect, the whole line needs to be replaced
带
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
这是因为Apple的heightForRowAtindexPath的默认委托方法需要使用CGFloat而不是float。您还可以通过进入.h文件,右键单击UITableViewDelegate或UITableViewDataSource协议来仔细检查您可能实现的未来委托方法,以查看Apple的完整方法构造列表以及如何调用,使用它们以及它们的返回类型是什么
有关使用CGFloat
代替float
以回应Wain评论的更多信息。
来自帖子Why to use CGFloat instead of float
“CGFloat只是float的一个typedef。这为CGFloat提供了一些不同的灵活性。这就是为什么使用它的未来代码。Objective-C用很多类型来做,NSInteger是另一个例子。“ - Jason McReary。
所以Apple喜欢使用这些类型def并鼓励开发人员这样做,以便在底层架构改变浮点数的处理方式时,您的代码可以成为未来的证明。