UICollectionViewLayout+MJRefresh.m 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //
  2. // UICollectionViewLayout+MJRefresh.m
  3. //
  4. // 该类是用来解决 Footer 在底端加载完成后, 仍停留在原处的 bug.
  5. // 此问题出现在 iOS 14 及以下系统上.
  6. // Reference: https://github.com/CoderMJLee/MJRefresh/issues/1552
  7. //
  8. // Created by jiasong on 2021/11/15.
  9. // Copyright © 2021 小码哥. All rights reserved.
  10. //
  11. #import "UICollectionViewLayout+MJRefresh.h"
  12. #import "MJRefreshConst.h"
  13. #import "MJRefreshFooter.h"
  14. #import "UIScrollView+MJRefresh.h"
  15. @implementation UICollectionViewLayout (MJRefresh)
  16. + (void)load {
  17. static dispatch_once_t onceToken;
  18. dispatch_once(&onceToken, ^{
  19. MJRefreshExchangeImplementations(self.class, @selector(finalizeCollectionViewUpdates),
  20. self.class, @selector(mj_finalizeCollectionViewUpdates));
  21. });
  22. }
  23. - (void)mj_finalizeCollectionViewUpdates {
  24. [self mj_finalizeCollectionViewUpdates];
  25. __kindof MJRefreshFooter *footer = self.collectionView.mj_footer;
  26. CGSize newSize = self.collectionViewContentSize;
  27. CGSize oldSize = self.collectionView.contentSize;
  28. if (footer != nil && !CGSizeEqualToSize(newSize, oldSize)) {
  29. NSDictionary *changed = @{
  30. NSKeyValueChangeNewKey: [NSValue valueWithCGSize:newSize],
  31. NSKeyValueChangeOldKey: [NSValue valueWithCGSize:oldSize],
  32. };
  33. [CATransaction begin];
  34. [CATransaction setDisableActions:YES];
  35. [footer scrollViewContentSizeDidChange:changed];
  36. [CATransaction commit];
  37. }
  38. }
  39. @end