react-native-navigation的迁移库

RNNSwizzles.m 1.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. //
  2. // RNNSwizzles.m
  3. // ReactNativeNavigation
  4. //
  5. // Created by Leo Natan (Wix) on 1/17/18.
  6. // Copyright © 2018 artal. All rights reserved.
  7. //
  8. #import "RNNSwizzles.h"
  9. @import ObjectiveC;
  10. @import UIKit;
  11. static id (*__SWZ_initWithEventDispatcher_orig)(id self, SEL _cmd, id eventDispatcher);
  12. @implementation RNNSwizzles
  13. - (id)__swz_initWithEventDispatcher:(id)eventDispatcher
  14. {
  15. id returnValue = __SWZ_initWithEventDispatcher_orig(self, _cmd, eventDispatcher);
  16. #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_11_0
  17. if (@available(iOS 11.0, *)) {
  18. [(UIScrollView*)[returnValue valueForKey:@"scrollView"] setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentAutomatic];
  19. }
  20. #endif
  21. return returnValue;
  22. }
  23. + (void)applySwizzles
  24. {
  25. #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_11_0
  26. Class cls = NSClassFromString(@"RCTScrollView");
  27. if(cls == NULL)
  28. {
  29. return;
  30. }
  31. Method m1 = class_getInstanceMethod(cls, NSSelectorFromString(@"initWithEventDispatcher:"));
  32. if(m1 == NULL)
  33. {
  34. return;
  35. }
  36. __SWZ_initWithEventDispatcher_orig = (void*)method_getImplementation(m1);
  37. Method m2 = class_getInstanceMethod([RNNSwizzles class], NSSelectorFromString(@"__swz_initWithEventDispatcher:"));
  38. method_exchangeImplementations(m1, m2);
  39. }
  40. #endif
  41. @end