1

在找到解决方案之前,我试图解决这个问题两天。这里是。

======

大家好,

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

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

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

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

我仍然需要它用于ios7。

通过

4

3 回答 3

4

试试这个

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
 {
    if(IS_IOS8){
     return UITableViewAutomaticDimension;
     }
     else
    {
       int height; // your custom  calculated height
       return height;
     }
 }
于 2015-06-18T14:13:58.680 回答
1

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

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

希望能帮助到你

通过

于 2015-06-18T13:00:53.377 回答
1

你仍然可以使用tableView:heightForRowAtIndexPath:

- (void)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewAutomaticDimension;
}
于 2015-06-18T13:56:53.363 回答