首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅根据运行时系统iOS版本覆盖方法?

如何仅根据运行时系统iOS版本覆盖方法?
EN

Stack Overflow用户
提问于 2014-09-24 16:36:09
回答 2查看 1.4K关注 0票数 12

我已经为iOS 8实现了自动动态表视图单元格高度,使用

代码语言:javascript
复制
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方法。对于如何做到这一点,有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-24 16:43:50

一种解决方案是覆盖视图控制器中的respondsToSelector:方法。在检查NO方法时,让它在iOS 8下返回heightForRowAtIndexPath:

代码语言:javascript
复制
- (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];
}

这样,当表视图进行如下调用时:

代码语言:javascript
复制
if ([self.delegate respondsToSelector:@selector(tableView:heightForRowAtIndexPath:)]) {
}

您的代码将在iOS 8或更高版本下返回iOS,在iOS 7或更高版本下返回YES

票数 19
EN

Stack Overflow用户

发布于 2014-09-24 16:56:07

我找到了一个简单的解决方案。声明此宏以识别用户是否拥有iOS 8.0或更高版本:

代码语言:javascript
复制
#define IS_IOS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)

然后,在heightForRowAtIndexPath内部添加了以下代码:

代码语言:javascript
复制
if (IS_IOS_8_OR_LATER) {
        self.tableView.rowHeight = UITableViewAutomaticDimension;
        return self.tableView.rowHeight;
    } else {//Custom code for ios version earlier than 8.0

}

这解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26022113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档