I\'ve implemented automatic dynamic tableview cell heights for iOS 8 by using
self.tableView.rowHeight = UITableViewAutomaticDimension;
For
I found a simple solution. Declared this macro to recognize if user has iOS 8.0 or later:
#define IS_IOS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
Then, inside heightForRowAtIndexPath I added the following code:
if (IS_IOS_8_OR_LATER) {
self.tableView.rowHeight = UITableViewAutomaticDimension;
return self.tableView.rowHeight;
} else {//Custom code for ios version earlier than 8.0
}
This solved the problem
One solution would be to override the respondsToSelector:
method in your view controller. Have it return NO
under iOS 8 when checking for the heightForRowAtIndexPath:
method.
- (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];
}
This way, when the table view make a call like:
if ([self.delegate respondsToSelector:@selector(tableView:heightForRowAtIndexPath:)]) {
}
your code will return NO
under iOS 8 or later and YES
under iOS 7 or earlier.