1

解決策を見つける前に、この問題を 2 日間解決しようとしています。ここにあります。

======

皆さんこんにちは、

私は実際に iOS7 でデリゲート メソッド heightForRowAtIndexPath を使用して tableViewCell の高さを管理しています。

現在、iOS8 ではプロパティ tableView.rowHeight = UITableViewAutomaticDimension を autolayout で使用しており、以前よりも優れた機能を発揮します。

問題は、コードから 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) 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];
}

それが役に立てば幸い

経由

于 2015-06-18T13:00:53.377 に答える