FLEXTableView.m 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. //
  2. // FLEXTableView.m
  3. // FLEX
  4. //
  5. // Created by Tanner on 4/17/19.
  6. // Copyright © 2019 Flipboard. All rights reserved.
  7. //
  8. #import "FLEXTableView.h"
  9. #import "FLEXUtility.h"
  10. #import "FLEXSubtitleTableViewCell.h"
  11. #import "FLEXMultilineTableViewCell.h"
  12. @interface UITableView (Private)
  13. - (CGFloat)_heightForHeaderInSection:(NSInteger)section;
  14. - (NSString *)_titleForHeaderInSection:(NSInteger)section;
  15. @end
  16. @implementation FLEXTableView
  17. + (instancetype)flexDefaultTableView {
  18. #if FLEX_AT_LEAST_IOS13_SDK
  19. if (@available(iOS 13.0, *)) {
  20. return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleInsetGrouped];
  21. } else {
  22. return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
  23. }
  24. #else
  25. return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
  26. #endif
  27. }
  28. - (CGFloat)_heightForHeaderInSection:(NSInteger)section {
  29. CGFloat height = [super _heightForHeaderInSection:section];
  30. if (section == 0 && self.tableHeaderView) {
  31. NSString *title = [self _titleForHeaderInSection:section];
  32. if (!@available(iOS 13, *)) {
  33. return height - self.tableHeaderView.frame.size.height + 8;
  34. } else if ([title isEqualToString:@" "]) {
  35. return height - self.tableHeaderView.frame.size.height + 5;
  36. }
  37. }
  38. return height;
  39. }
  40. - (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
  41. {
  42. self = [super initWithFrame:frame style:style];
  43. if (self) {
  44. [self registerCells:@{
  45. self.defaultReuseIdentifier : [FLEXTableViewCell class],
  46. self.subtitleReuseIdentifier : [FLEXSubtitleTableViewCell class],
  47. self.multilineReuseIdentifier : [FLEXMultilineTableViewCell class],
  48. }];
  49. }
  50. return self;
  51. }
  52. - (void)registerCells:(NSDictionary<NSString*,Class> *)registrationMapping
  53. {
  54. [registrationMapping enumerateKeysAndObjectsUsingBlock:^(NSString *identifier, Class cellClass, BOOL *stop) {
  55. [self registerClass:cellClass forCellReuseIdentifier:identifier];
  56. }];
  57. }
  58. - (NSString *)defaultReuseIdentifier
  59. {
  60. return @"kFLEXTableViewCellIdentifier";
  61. }
  62. - (NSString *)subtitleReuseIdentifier
  63. {
  64. return @"kFLEXSubtitleTableViewCellIdentifier";
  65. }
  66. - (NSString *)multilineReuseIdentifier
  67. {
  68. return kFLEXMultilineTableViewCellIdentifier;
  69. }
  70. @end