我已经为iOS 8实现了自动动态表视图单元格高度,使用
self.tableView.rowHeight = UITableViewAutomaticDimension;对于不支持自动动态单元格高度的预iOS 8,我重写了heightForRowAtIndexPath方法。
这与我所做的类似:Using Auto Layout in UITableView for dynamic cell layouts & variable row heights
问题是如何为iOS 8编写使用自动单元格高度但在早期iOS版本中重写heightForRowAtIndexPath的代码。只有在heightForRowAtIndexPath版本小于8的情况下,我才想使用自定义的iOS方法。对于如何做到这一点,有什么建议吗?
发布于 2014-09-24 16:43:50
一种解决方案是覆盖视图控制器中的respondsToSelector:方法。在检查NO方法时,让它在iOS 8下返回heightForRowAtIndexPath:。
- (BOOL)respondsToSelector:(SEL)selector {
static BOOL useSelector;
static dispatch_once_t predicate = 0;
dispatch_once(&predicate, ^{
useSelector = [[UIDevice currentDevice].systemVersion floatValue] < 8.0 ? YES : NO;
});
if (selector == @selector(tableView:heightForRowAtIndexPath:)) {
return useSelector;
}
return [super respondsToSelector:selector];
}这样,当表视图进行如下调用时:
if ([self.delegate respondsToSelector:@selector(tableView:heightForRowAtIndexPath:)]) {
}您的代码将在iOS 8或更高版本下返回iOS,在iOS 7或更高版本下返回YES。
发布于 2014-09-24 16:56:07
我找到了一个简单的解决方案。声明此宏以识别用户是否拥有iOS 8.0或更高版本:
#define IS_IOS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)然后,在heightForRowAtIndexPath内部添加了以下代码:
if (IS_IOS_8_OR_LATER) {
self.tableView.rowHeight = UITableViewAutomaticDimension;
return self.tableView.rowHeight;
} else {//Custom code for ios version earlier than 8.0
}这解决了这个问题。
https://stackoverflow.com/questions/26022113
复制相似问题