我无法弄清楚如何使用iOS启动画面作为我的应用的背景。在Android上,默认情况下它位于后台,您只需要让React根视图的背景透明即可显示。
这就是我的 AppDelegate.m 现在的样子: https://github.com/facebook/react-native/blob/master/local-cli/templates/HelloWorld/ios/HelloWorld/AppDelegate.m
Peter Minarik尝试过这个解决方案:https://peterminarik.tumblr.com/post/153039209421/how-to-fix-the-initial-white-flash-in-your-react ...但它使我的应用程序在启动时崩溃。没有错误,我在模拟器的日志中唯一能找到的是:
彼得的解决方案:com.apple.CoreSimulator.SimDevice.4D60253D-C11F-4927-A3A3-3CC555432326 [53234](com.apple.videosubscriptionsd [20497]):服务退出时出现异常代码:1
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// ...
// 1. Load the LaunchScreen from the xib file
UIView *backgroundView = [[[NSBundle mainBundle] loadNibNamed:@"LaunchScreen" owner:self options:nil] firstObject];
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation ... ];
// 2. Set the backgroundColor of the react view to be transparent
rootView.backgroundColor = [UIColor clearColor];
// ...
// 3. Set the backgroundView as main view for the rootViewController (instead of the rootView)
rootViewController.view = backgroundView;
[self.window makeKeyAndVisible];
// 4. After the window is visible, add the rootView as a subview to your backgroundView
[backgroundView addSubview:rootView];
// 5. Then make the rootViews frame the same as the backgroundView
rootView.frame = backgroundView.frame;
return YES;
}
@end
这是我的 LaunchScreen.xib :
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<viewController id="CQd-0M-zUa">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="JTh-uz-DhT"/>
<viewControllerLayoutGuide type="bottom" id="Pi7-cH-HiC"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="kTS-qs-i9x">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="Image" translatesAutoresizingMaskIntoConstraints="NO" id="f0g-jh-Eny">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="S0g-wl-Fc0">
<rect key="frame" x="79" y="306" width="240" height="128"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<mutableString key="text">Lorem ipsum dolor sit...</mutableString>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<point key="canvasLocation" x="1327.5" y="531.5"/>
</viewController>
</objects>
<resources>
<image name="Image" width="375" height="667"/>
</resources>
</document>
我不了解Objective-C。你能帮我吗?
答案 0 :(得分:1)
我已经想出了怎么做。之前的解决方案不起作用的原因是我的 LaunchScreen包含一个视图控制器,而不是一个视图。因此,您不必创建UIViewController的新实例,只需使用此实例并将rootView作为子视图附加。
viewRecord
现在我的启动画面始终位于应用程序的后台。