【问题标题】:How to increase the height of navigation bar in Xcode?如何在 Xcode 中增加导航栏的高度?
【发布时间】:2015-11-03 14:16:43
【问题描述】:

我正在开发一个应用程序,我需要在其中保留一个导航栏。 当我在栏上写任何标题时,时间和标题有点接近。我想增加吧台的高度,这样可以得到一些喘息的空间。

【问题讨论】:

标签: ios objective-c iphone xcode swift


【解决方案1】:

如果我没记错的话,你不能改变默认NavigationBar 的高度。

不过,您可以创建一个自定义 NavigationBar 并为其添加自定义高度。

【讨论】:

    【解决方案2】:

    选择您的ViewController --> 选择您的导航项 --> 提示 --> 添加空格增加height**Navigation bar**

    在此处查看图片:

    以编程方式

    viewWillAppearviewDidAppear 方法中添加这个

    Objective-C

    [self.navigationController.navigationBar setFrame:CGRectMake(0, 0, self.view.frame.size.width,80.0)];
    

    斯威夫特

    self.navigationController.navigationBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 80.0)
    

    Swift-3

    self.navigationController!.navigationBar.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 80.0)
    

    iOS 11

    目标 C

    for (UIView *subview in self.navigationController.navigationBar.subviews) {
        if ([NSStringFromClass([subview class]) containsString:@"BarBackground"]) {
            CGRect subViewFrame = subview.frame;
            // subViewFrame.origin.y = -20;
            subViewFrame.size.height = 100;
            [subview setFrame: subViewFrame];
        }
    }
    

    迅速

    for subview in (self.navigationController?.navigationBar.subviews)! {
           if NSStringFromClass(subview.classForCoder).contains("BarBackground") {
                var subViewFrame: CGRect = subview.frame
                // subViewFrame.origin.y = -20;
                subViewFrame.size.height = 100
                subview.frame = subViewFrame
    
            }
    
        }
    

    【讨论】:

    • 用白色文本移动提示可以正常工作,不知道为什么但没关系:D
    • 在 viewWillAppear 中以编程方式设置在 iOS 10 中不起作用
    • @Anbu.Karthik,兄弟,你的答案对我有用,但对于 collectionView 控制器,导航栏位置在后面,Collection VC 滚动视图在前面。如何将导航栏设置在前面?
    • @adev - 检查更新的答案,它在 iOS 11 中对我来说工作正常
    • 是否也可以为导航栏的“增长”设置动画?从一个 VC(有一个小的)到下一个 VC 到更大的导航栏的过渡并不顺利
    【解决方案3】:

    viewWillAppear 方法中添加这个

    CGFloat height = 80;
    [self.navigationController.navigationBar setFrame:CGRectMake(0, 0,
    self.view.frame.size.width,height)];
    

    如果它首先增加并缩小到原始高度,则在 viewDidAppear 方法中添加此代码

    【讨论】:

    • 我的建议是使用自定义导航栏
    【解决方案4】:

    此解决方案不再适用于 Xcode 8.x.x 及更高版本!

    您也可以按照以下步骤在不创建自定义导航的情况下增加高度

    步骤 1 在 Storyboard 或 XIB 中选择导航栏

    第 2 步从 Identity Inspector 复制 ObjectID

    第 3 步打开 Storyboard/XIB 作为源代码

    第 4 步在搜索中查找 ObjectID 之后的 Source Code 中的 ObjectID

    第 5 步编辑高度!就是这样

    希望对您有所帮助

    【讨论】:

    • 苹果允许吗?请告诉我
    • 在 xcode 8 中工作。只需搜索 navigationBar 并设置高度 ;)
    • @MeghsDhameliya 这在 Xcode 8.3.3、Xcode 9、Xcode 9.2 中不起作用
    • @AshokLondhe 哦,我会及时更新,谢谢更新
    • 为什么将可视化编辑工具的底层 XML 编辑为解决方案会获得支持?
    【解决方案5】:

    将以下扩展添加到您的项目中:

    import UIKit
    
    extension UINavigationBar {
    
        override open func sizeThatFits(_ size: CGSize) -> CGSize {
            return CGSize(width: UIScreen.main.bounds.size.width, height: 80.0)
        }
    
    }
    

    【讨论】:

    • 如何调用这个扩展?
    • @Hemang 这个方法会在你的应用中的 UINavigationBars 被绘制的时候自动调用。无需自己调用。
    • 这在 iOS 11 中不起作用。即使它被调用,导航栏仍然有旧的高度。
    【解决方案6】:

    每次视图显示时,我们需要改变导航栏的高度。所以把代码放在viewWillAppear上

    override func viewWillAppear(_ animated: Bool) {
         self.navigationController?.navigationBar.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 80)
    }
    

    我们可以将宽度设置为视图的宽度,并根据需要更改高度。

    【讨论】:

    • 导航栏框架已更改,但无法正常工作。我将 xcode12.2 与 iphone6s14.2 一起使用
    【解决方案7】:

    【讨论】:

    • 如果链接断开,仅链接的答案可能会变得毫无用处。请在帖子中提供一组最少的说明。
    • 此链接是 Apple 长期链接,也是此处描述的最佳答案。其他答案比使用导航栏和导航栏 ctrl 的便捷方式更多 hack
    • ExtendedNavBar 不是示例 Xcode 项目的一部分
    • 该链接指向的示例代码不包含增加高度的示例。
    【解决方案8】:

    Apple proposes 不调整 navigationBar 本身的大小,而是从栏中删除阴影并在您的 navigationBar 下添加自定义视图。这适用于大多数情况。检查 Apple 的样品。

    【讨论】:

    • 您能描述一下您在哪里看到该提案吗?我在您链接的页面中找不到它。
    • @Patrick 您需要下载附加项目。他们有示例实现。
    【解决方案9】:

    [self.navigationController.navigationBar setPrefersLargeTitles:YES]; 将以编程方式增加导航栏高度

    【讨论】:

      【解决方案10】:

      只需将此行添加到您的 viewController

      navigationController?.additionalSafeAreaInsets.top = 30 
        // where 30 is the extra space, add as per your need. 
      

      【讨论】:

      • 就我而言,我必须隐藏我的状态栏。所以我通过覆盖视图控制器方法来做到这一点。它产生了一个问题。当我隐藏状态栏时,当状态栏未隐藏时,我的导航栏会上下移动。所以我需要添加空间来代替状态栏。上面的解决方案对我有用。
      【解决方案11】:
          navigationController?.additionalSafeAreaInsets.top = 25
      

      将此添加到 viewDidLoad。它肯定会奏效。在 Xcode 12 版本中成功工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-24
        • 1970-01-01
        • 2018-03-01
        • 1970-01-01
        • 2017-11-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多