iOS啥都不必干,又或者是FB还没来得及改?
https://github.com/facebook/r...
/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */#import "RCTDeviceInfo.h"#import <FBReactNativeSpec/FBReactNativeSpec.h>#import <React/RCTAccessibilityManager.h>#import <React/RCTAssert.h>#import <React/RCTConstants.h>#import <React/RCTEventDispatcher.h>#import <React/RCTUIUtils.h>#import <React/RCTUtils.h>#import "CoreModulesPlugins.h"using namespace facebook::react;@interface RCTDeviceInfo () <NativeDeviceInfoSpec>@end@implementation RCTDeviceInfo {#if !TARGET_OS_TV UIInterfaceOrientation _currentInterfaceOrientation; NSDictionary *_currentInterfaceDimensions;#endif}@synthesize bridge = _bridge;RCT_EXPORT_MODULE()+ (BOOL)requiresMainQueueSetup{ return YES;}- (dispatch_queue_t)methodQueue{ return dispatch_get_main_queue();}- (void)setBridge:(RCTBridge *)bridge{ _bridge = bridge; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNewContentSizeMultiplier) name:RCTAccessibilityManagerDidUpdateMultiplierNotification object:_bridge.accessibilityManager];#if !TARGET_OS_TV _currentInterfaceOrientation = [RCTSharedApplication() statusBarOrientation]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(interfaceOrientationDidChange) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; _currentInterfaceDimensions = RCTExportedDimensions(_bridge); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(interfaceFrameDidChange) name:UIApplicationDidBecomeActiveNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(interfaceFrameDidChange) name:RCTUserInterfaceStyleDidChangeNotification object:nil];#endif}static BOOL RCTIsIPhoneX(){ static BOOL isIPhoneX = NO; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ RCTAssertMainQueue(); CGSize screenSize = [UIScreen mainScreen].nativeBounds.size; CGSize iPhoneXScreenSize = CGSizeMake(1125, 2436); CGSize iPhoneXMaxScreenSize = CGSizeMake(1242, 2688); CGSize iPhoneXRScreenSize = CGSizeMake(828, 1792); isIPhoneX = CGSizeEqualToSize(screenSize, iPhoneXScreenSize) || CGSizeEqualToSize(screenSize, iPhoneXMaxScreenSize) || CGSizeEqualToSize(screenSize, iPhoneXRScreenSize); }); return isIPhoneX;}static NSDictionary *RCTExportedDimensions(RCTBridge *bridge){ RCTAssertMainQueue(); RCTDimensions dimensions = RCTGetDimensions(bridge.accessibilityManager.multiplier); __typeof(dimensions.window) window = dimensions.window; NSDictionary<NSString *, NSNumber *> *dimsWindow = @{ @"width" : @(window.width), @"height" : @(window.height), @"scale" : @(window.scale), @"fontScale" : @(window.fontScale) }; __typeof(dimensions.screen) screen = dimensions.screen; NSDictionary<NSString *, NSNumber *> *dimsScreen = @{ @"width" : @(screen.width), @"height" : @(screen.height), @"scale" : @(screen.scale), @"fontScale" : @(screen.fontScale) }; return @{@"window" : dimsWindow, @"screen" : dimsScreen};}- (NSDictionary<NSString *, id> *)constantsToExport{ return [self getConstants];}- (NSDictionary<NSString *, id> *)getConstants{ return @{ @"Dimensions" : RCTExportedDimensions(_bridge), // Note: // This prop is deprecated and will be removed in a future release. // Please use this only for a quick and temporary solution. // Use <SafeAreaView> instead. @"isIPhoneX_deprecated" : @(RCTIsIPhoneX()), };}- (void)didReceiveNewContentSizeMultiplier{ RCTBridge *bridge = _bridge; RCTExecuteOnMainQueue(^{ // Report the event across the bridge.#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wdeprecated-declarations" [bridge.eventDispatcher sendDeviceEventWithName:@"didUpdateDimensions" body:RCTExportedDimensions(bridge)];#pragma clang diagnostic pop });}#if !TARGET_OS_TV- (void)interfaceOrientationDidChange{ __weak __typeof(self) weakSelf = self; RCTExecuteOnMainQueue(^{ [weakSelf _interfaceOrientationDidChange]; });}- (void)_interfaceOrientationDidChange{ UIInterfaceOrientation nextOrientation = [RCTSharedApplication() statusBarOrientation]; // Update when we go from portrait to landscape, or landscape to portrait if ((UIInterfaceOrientationIsPortrait(_currentInterfaceOrientation) && !UIInterfaceOrientationIsPortrait(nextOrientation)) || (UIInterfaceOrientationIsLandscape(_currentInterfaceOrientation) && !UIInterfaceOrientationIsLandscape(nextOrientation))) {#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wdeprecated-declarations" [_bridge.eventDispatcher sendDeviceEventWithName:@"didUpdateDimensions" body:RCTExportedDimensions(_bridge)];#pragma clang diagnostic pop } _currentInterfaceOrientation = nextOrientation;}- (void)interfaceFrameDidChange{ __weak __typeof(self) weakSelf = self; RCTExecuteOnMainQueue(^{ [weakSelf _interfaceFrameDidChange]; });}- (void)_interfaceFrameDidChange{ NSDictionary *nextInterfaceDimensions = RCTExportedDimensions(_bridge); if (!([nextInterfaceDimensions isEqual:_currentInterfaceDimensions])) {#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wdeprecated-declarations" [_bridge.eventDispatcher sendDeviceEventWithName:@"didUpdateDimensions" body:nextInterfaceDimensions];#pragma clang diagnostic pop } _currentInterfaceDimensions = nextInterfaceDimensions;}#endif // TARGET_OS_TV- (std::shared_ptr<TurboModule>)getTurboModule:(const ObjCTurboModule::InitParams &)params{ return std::make_shared<NativeDeviceInfoSpecJSI>(params);}@endClass RCTDeviceInfoCls(void){ return RCTDeviceInfo.class;}