删除 iOS8 的“heightForRowAtIndexPath”

Posted

技术标签:

【中文标题】删除 iOS8 的“heightForRowAtIndexPath”【英文标题】:Remove "heightForRowAtIndexPath" for iOS8 【发布时间】:2015-06-18 13:00:53 【问题描述】:

我试图解决这个问题两天,然后才找到解决方案。 在这里。

======

大家好,

我实际上在 ios7 中使用委托方法 heightForRowAtIndexPath 管理我的 tableViewCell 的高度:

现在,在 iOS8 中,我将属性 tableView.rowHeight = UITableViewAutomaticDimension 与自动布局一起使用,它的效果比以前更好。

问题是我需要从我的代码中删除 heightForRowAtIndexPath: 方法,否则属性不起作用(高度在里面设置并控制属性)。

如何才能仅在 iOS8 中删除此方法(可能使用编译指令,但我不知道是哪一个)?

我在 ios7 上仍然需要它。

via

【问题讨论】:

为什么不保持简单,直接从heightForRowAtIndexPath返回UITableViewAutomaticDimension?无需特定版本的测试。 【参考方案1】:

试试这个

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
 
    if(IS_IOS8)
     return UITableViewAutomaticDimension;
     
     else
    
       int height; // your custom  calculated height
       return height;
     
 

【讨论】:

【参考方案2】:

我也有这个问题,看这里:

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)我们需要重写responsesToSelector方法,这样需要的资源消耗更少,因为我们不需要为每一行调用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];

希望对你有帮助

via

【讨论】:

【参考方案3】:

你仍然可以使用tableView:heightForRowAtIndexPath:

- (void)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
    return UITableViewAutomaticDimension;

【讨论】:

以上是关于删除 iOS8 的“heightForRowAtIndexPath”的主要内容,如果未能解决你的问题,请参考以下文章

为啥你必须在 ios8 中删除观察者?

ios8 swift:我如何访问/编辑/删除默认/私有 inputAccessoryView 高度约束'_UIKBAutolayoutHeightConstraint'

UITableView 滑动删除在 iOS8 上无法正常工作

在 iOS 8 中删除专辑后 AssetsLibrary 框架无法正常工作

显示 iOS8 相机权限提示 - 但未使用相机

UITableviewCell 高度自动布局