为 iOS8 移除 "heightForRowAtIndexPath"
Remove "heightForRowAtIndexPath" for iOS8
我试了两天才找到解决办法。
在这里。
======
大家好,
我实际上使用委托方法 heightForRowAtIndexPath:
在 iOS7 中管理我的 tableViewCell 的高度
现在,在 iOS8 中,我使用 属性 tableView.rowHeight = UITableViewAutomaticDimension 和自动布局,它比以前更好用。
问题是我需要从我的代码中删除 heightForRowAtIndexPath: 方法,否则 属性 不起作用(高度在内部设置并控制 属性)。
如何才能仅在 iOS8 中删除此方法(可能使用编译指令,但我不知道是哪一个)?
ios7我还需要它。
我也有这个问题,所以看这里:
1) 我们需要创建宏
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
2) 需要在 viewWillAppear 中检查版本
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (![self.p_tableView respondsToSelector:@selector(tableView:heightForRowAtIndexPath:)])
{
self.p_tableView.rowHeight = UITableViewAutomaticDimension;
self.p_tableView.estimatedRowHeight = 100.0f;
}
}
3) 我们需要覆盖 respondsToSelector 方法,这样需要的资源消耗更少,因为我们不需要为每一行调用 heightForRow
- (BOOL)respondsToSelector:(SEL)selector
{
static BOOL useSelector;
static dispatch_once_t predicate = 0;
dispatch_once(&predicate, ^{
useSelector = SYSTEM_VERSION_LESS_THAN(@"8.0");
});
if (selector == @selector(tableView:heightForRowAtIndexPath:))
{
return useSelector;
}
return [super respondsToSelector:selector];
}
希望对您有所帮助
您仍然可以使用 tableView:heightForRowAtIndexPath:
- (void)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
试试这个
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(IS_IOS8){
return UITableViewAutomaticDimension;
}
else
{
int height; // your custom calculated height
return height;
}
}
我试了两天才找到解决办法。 在这里。
======
大家好,
我实际上使用委托方法 heightForRowAtIndexPath:
在 iOS7 中管理我的 tableViewCell 的高度现在,在 iOS8 中,我使用 属性 tableView.rowHeight = UITableViewAutomaticDimension 和自动布局,它比以前更好用。
问题是我需要从我的代码中删除 heightForRowAtIndexPath: 方法,否则 属性 不起作用(高度在内部设置并控制 属性)。
如何才能仅在 iOS8 中删除此方法(可能使用编译指令,但我不知道是哪一个)?
ios7我还需要它。
我也有这个问题,所以看这里:
1) 我们需要创建宏
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
2) 需要在 viewWillAppear 中检查版本
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (![self.p_tableView respondsToSelector:@selector(tableView:heightForRowAtIndexPath:)])
{
self.p_tableView.rowHeight = UITableViewAutomaticDimension;
self.p_tableView.estimatedRowHeight = 100.0f;
}
}
3) 我们需要覆盖 respondsToSelector 方法,这样需要的资源消耗更少,因为我们不需要为每一行调用 heightForRow
- (BOOL)respondsToSelector:(SEL)selector
{
static BOOL useSelector;
static dispatch_once_t predicate = 0;
dispatch_once(&predicate, ^{
useSelector = SYSTEM_VERSION_LESS_THAN(@"8.0");
});
if (selector == @selector(tableView:heightForRowAtIndexPath:))
{
return useSelector;
}
return [super respondsToSelector:selector];
}
希望对您有所帮助
您仍然可以使用 tableView:heightForRowAtIndexPath:
- (void)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
试试这个
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(IS_IOS8){
return UITableViewAutomaticDimension;
}
else
{
int height; // your custom calculated height
return height;
}
}