【问题标题】:Custom Push Segue removes navigation bar and tab bar in story boardCustom Push Segue 移除了故事板中的导航栏和标签栏
【发布时间】:2013-12-02 05:56:23
【问题描述】:

我在自定义 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>

【问题讨论】:

  • 你会很高兴知道它不是这样的——我复制了你的代码,它运行良好。不幸的是,我不知道为什么你的不起作用。您使用的是什么版本的 Xcode 和 iOS(我的是运行 iOS 7.0 的 Xcode 5.0.1)。
  • 我正在使用 Xcode 5.0 (5A1412),将尝试升级,希望它能正常工作!
  • 现在我安装了 Xcode 5.0.2 但不幸的是它没有帮助,结果仍然相同。将使用 segue 上的信息更新问题
  • 嗯...这很好奇。我假设您的源视图控制器仍然嵌入在导航控制器中?如果您可以在某处发布您的项目或通过电子邮件将其发送给我,我会很高兴看到它。
  • 当你改变 segue 时,导航栏和工具栏应该在故事板中消失——这是正常的。您可以将底部栏的模拟指标更改为“半透明工具栏”,这会将其添加回来,因此您可以向其添加按钮。但是,您仍然应该在运行时看到两个栏及其按钮。

标签: ios cocoa-touch ios7 segue uistoryboardsegue


【解决方案1】:

尝试检查您是否在情节提要上设置了类似

的选项 这些指标是在推送的视图控制器上推断出来的(但我很确定它不算数)。

和/或在推送视图控制器的-viewWillAppear 内以编程方式强制导航栏和底部栏可见

[self.navigationController setNavigationBarHidden:NO animated:NO];
[self.navigationController setToolbarHidden:NO animated:NO];

【讨论】:

  • 不,不幸的是,情况并非如此。 "在推送时隐藏底部栏未选中。第二张图片中的所有内容都是推断的
  • 是的,如果我以编程方式进行,一切都会正常。 (即使故事板版本有效,但导航项按钮不会在应用程序中创建)所以我实际上在运行时有一个导航栏和一个标签栏,但导航栏中的按钮不存在,我无法添加故事板中的按钮,因为导航栏隐藏在这里
【解决方案2】:

当您更改 segue 时,导航栏和工具栏应该在故事板中消失 - 这是正常的。您可以将底部栏的模拟指标更改为“半透明工具栏”,这会将其添加回来,因此您可以向其添加按钮(您只想更改模拟指标,而不是拖动另一个工具栏,这将添加第二个工具栏)。在运行时,您应该仍然可以看到两个栏及其按钮。

【讨论】:

    【解决方案3】:
    (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];
        } 
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-10
      • 2017-03-18
      • 2019-01-08
      • 2014-06-26
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多