Custom Push Segue removes navigation bar and tab bar in story board

21,204

Solution 1

The navigation bar and the tool bar should disappear in the storyboard when you change the segue -- that's normal. You can change the simulated metrics for the bottom bar to "Translucent Toolbar", which will add it back, so you can add buttons to it (you only want to change the simulated metrics, not drag in another tool bar which would add a second tool bar). You should still see both bars with their buttons at run time.

Solution 2

Try to check if you have set on storyboard an option like
enter image description here
That metrics are inferred on the pushed view controller (but I'm pretty sure it doesn't count).
enter image description here

And/or force the navigation bar and bottom bar to be visible programmatically using, inside the -viewWillAppear of the pushed view controller

[self.navigationController setNavigationBarHidden:NO animated:NO];
[self.navigationController setToolbarHidden:NO animated:NO];
Share:
21,204
www.jensolsson.se
Author by

www.jensolsson.se

Updated on October 26, 2020

Comments

  • www.jensolsson.se
    www.jensolsson.se over 3 years

    I have the following defined in a custom Segue, let us call it SegueX:

    @interface SegueX : UIStoryboardSegue
    @end
    
    @implementation SegueX
    
    - (void)perform
    {
        CATransition* transition = [CATransition animation];
    
        transition.duration = 0.3;
        transition.type = kCATransitionFade;
    
        [[self.sourceViewController navigationController].view.layer addAnimation:transition forKey:kCATransition];
        [[self.sourceViewController navigationController] pushViewController:[self destinationViewController] animated:NO];
    }
    
    @end
    

    In my story board I have just changed a standard Push segue to SegueX. For some reason this will remove my navigation bar and tab bar. Furthermore all UIBarButtonItems I have defined in the story board after the custom segue are hidden at runtime. How do I fix this? I hope it is not meant to be this way...

    Before changing to a custom segue

    Before changing to a custom segue

    After changing to a custom segue

    After changing to a custom segue

    enter image description here

    Save this to Main.storyboard

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4514" systemVersion="13A603" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="aUj-3O-DdX">
        <dependencies>
            <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3747"/>
        </dependencies>
        <scenes>
            <!--Navigation Controller-->
            <scene sceneID="prC-ky-DMz">
                <objects>
                    <navigationController definesPresentationContext="YES" id="aUj-3O-DdX" sceneMemberID="viewController">
                        <navigationBar key="navigationBar" contentMode="scaleToFill" id="2Uu-Rm-RXH">
                            <autoresizingMask key="autoresizingMask"/>
                        </navigationBar>
                        <toolbar key="toolbar" opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="aOK-Kc-Mfz">
                            <rect key="frame" x="0.0" y="416" width="320" height="44"/>
                            <autoresizingMask key="autoresizingMask"/>
                        </toolbar>
                        <connections>
                            <segue destination="PDT-yG-B9z" kind="relationship" relationship="rootViewController" id="w27-w2-lcd"/>
                        </connections>
                    </navigationController>
                    <placeholder placeholderIdentifier="IBFirstResponder" id="fNx-r3-Dzg" userLabel="First Responder" sceneMemberID="firstResponder"/>
                </objects>
                <point key="canvasLocation" x="-65" y="-179"/>
            </scene>
            <!--View Controller-->
            <scene sceneID="kMj-Al-ZjY">
                <objects>
                    <viewController id="PDT-yG-B9z" sceneMemberID="viewController">
                        <layoutGuides>
                            <viewControllerLayoutGuide type="top" id="RKt-BS-gn9"/>
                            <viewControllerLayoutGuide type="bottom" id="eFe-fv-bG6"/>
                        </layoutGuides>
                        <view key="view" contentMode="scaleToFill" id="JbT-x8-qhX">
                            <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                            <subviews>
                                <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fTw-C6-P3N">
                                    <rect key="frame" x="137" y="269" width="46" height="30"/>
                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                    <state key="normal" title="Button">
                                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
                                    </state>
                                    <connections>
                                        <segue destination="uMi-ds-4FY" kind="custom" id="mPL-yx-hFQ"/>
                                    </connections>
                                </button>
                            </subviews>
                            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                        </view>
                        <navigationItem key="navigationItem" id="Im9-4G-4Ga"/>
                    </viewController>
                    <placeholder placeholderIdentifier="IBFirstResponder" id="qXF-QN-k3Z" userLabel="First Responder" sceneMemberID="firstResponder"/>
                </objects>
                <point key="canvasLocation" x="473" y="-177"/>
            </scene>
            <!--View Controller-->
            <scene sceneID="ca6-vg-B3h">
                <objects>
                    <viewController id="uMi-ds-4FY" sceneMemberID="viewController">
                        <layoutGuides>
                            <viewControllerLayoutGuide type="top" id="jd0-A9-WOV"/>
                            <viewControllerLayoutGuide type="bottom" id="5VJ-sS-U1V"/>
                        </layoutGuides>
                        <view key="view" contentMode="scaleToFill" id="gJp-P2-rUC">
                            <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                        </view>
                    </viewController>
                    <placeholder placeholderIdentifier="IBFirstResponder" id="pih-Kj-ioJ" userLabel="First Responder" sceneMemberID="firstResponder"/>
                </objects>
                <point key="canvasLocation" x="1003" y="-179"/>
            </scene>
        </scenes>
        <simulatedMetricsContainer key="defaultSimulatedMetrics">
            <simulatedStatusBarMetrics key="statusBar"/>
            <simulatedOrientationMetrics key="orientation"/>
            <simulatedScreenMetrics key="destination" type="retina4"/>
        </simulatedMetricsContainer>
    </document>