使用iOS启动屏幕作为react-native中的应用程序背景

时间:2018-01-11 17:06:11

标签: ios objective-c xcode react-native

我无法弄清楚如何使用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。你能帮我吗?

1 个答案:

答案 0 :(得分:1)

我已经想出了怎么做。之前的解决方案不起作用的原因是我的 LaunchScreen包含一个视图控制器,而不是一个视图。因此,您不必创建UIViewController的新实例,只需使用此实例并将rootView作为子视图附加。

viewRecord

现在我的启动画面始终位于应用程序的后台。