自定义Push Segue删除故事板中的导航栏和标签栏

我在定义Segue中定义了以下内容,让我们把它称为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 

在我的故事板中,我刚刚将一个标准的Push segue改成了SegueX。 出于某种原因,这将删除我的导航栏和标签栏。 而且,在定制的segue之后,在故事板中定义的所有UIBarButtonItems都在运行时隐藏。 我该如何解决? 我希望它不是这样的…

在更改为自定义赛格之前

在更改为自定义赛格之前

改成自定义赛格后

改成自定义赛格后

在这里输入图像说明

保存到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> 

当你改变赛格时,导航栏和工具栏应该会在故事板中消失 – 这是正常的。 您可以将底部栏的模拟指标更改为“半透明工具栏”,该工具栏会将其添加回来,因此您可以添加button(您只需要更改模拟的指标,而不是拖入另一个工具栏中,这会添加一秒工具栏)。 在运行时你应该仍然可以看到两个button。

尝试检查是否在故事板上设置了一个选项
在这里输入图像说明
这个指标是在推送的视图控制器上推断出来的(但我确信它不计算在内)。
在这里输入图像说明

和/或强制导航栏和底部栏可视化使用,在推视图控制器的-viewWillAppear

 [self.navigationController setNavigationBarHidden:NO animated:NO]; [self.navigationController setToolbarHidden:NO animated:NO]; 
 (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { ViewController * controller = [[ViewController alloc]init]; controller.hidesBottomBarWhenPushed=YES; if ([segue.identifier isEqualToString:@"Commentsegue"]) { //For hiding the tab bar [segue.destinationViewController setHidesBottomBarWhenPushed:YES]; } }