以编程方式获取导航栏的高度

2024-04-24

我知道更多视图控制器(导航栏)的存在将 UIView 的高度推低。我也知道这个高度=44px。我还发现这种下推可以维持[self.view].frame.origin.y = 0.

那么,除了将其设置为常量之外,如何确定该导航栏的高度呢?

或者,更短的版本,如何确定我的 UIView 显示时导航栏位于顶部?


灯泡开始亮起来。不幸的是,我还没有找到纠正该问题的统一方法,如下所述。

我相信我的整个问题集中在我的 autoresizingMasks 上。我得出结论的原因是,无论有没有 UIWebView,都存在相同的症状。这个症状是肖像的一切都是桃色的。对于横向,最底部的 UIButton 在 TabBar 后面弹出。

例如,在一个 UIView 上,我从上到下:

UIView – 均设置弹簧(默认情况)且无支柱

UIScrollView - 如果我设置两个弹簧,并清除其他所有内容(如 UIView),则 UIButton 会侵入其上方的对象。如果我清除所有内容,那么 UIButton 就可以了,但是最顶部的东西隐藏在 StatusBar 后面 仅设置顶部支柱,UIButton 会在选项卡栏后面弹出。

UILabel 和 UIImage 垂直排列 – 顶部支柱设置,其他地方都很灵活

只是为了让少数拥有 UIWebView 的人完成图片:

UIWebView - Struts:顶部、左侧、右侧 Springs:两者

UIButton – 没有任何设置,即随处灵活

虽然我的灯泡昏暗,但似乎还有希望。


请耐心等待,因为我需要比简短回复评论更多的空间。

感谢您尝试了解我真正想要的东西......所以就这样。

1)每个UIViewController(一个TabBar应用程序)都有一个UIImage,一些文本以及顶部的任何内容。另一个共同点是底部有一个 UIButton。在某些 UIViewController 上,我在 UIButton 上方有一个 UIWebView。

所以,UIImage、文本等 UIWebView(在某些上)UIButton

围绕以上所有内容的是 UIScrollView。

2)对于那些拥有 UIWebView 的人,其 autoresizingMask 如下所示:

   —
   |
   —

   ^
   |
   |

|—| ←----→ |—| | | V UIButton 的 mask 没有任何设置,即到处都是灵活的

在我的 -viewDidLoad 中,我调用我的 -repositionSubViews,在其中执行以下操作:

如果没有 UIWebView,我除了将我放置在 IB 中的 UIButton 居中之外什么都不做。

如果我确实有一个 UIWebView,那么我确定它的 *content*Height 并设置它的框架以包含整个内容。

UIScrollView *scrollViewInsideWebView = [[webView_ subviews] lastObject];
webViewContentHeight = scrollViewInsideWebView.contentSize.height;
[webView_ setFrame:CGRectMake(webViewOriginX, webViewOriginY,
                          sameWholeViewScrollerWidth, webViewContentHeight)]

一旦我这样做了,我就会以编程方式将 UIButton 向下推,使其最终放置在 UIWebView 下方。

一切正常,直到我将其从纵向旋转为横向。

我在 -didRotateFromInterfaceOrientation 中调用我的 -repositionSubViews。

为什么我的 UIWebView 的内容高度不随旋转而改变?

从纵向到横向,内容宽度应扩大,内容高度应缩小。它在视觉上是正常的,但不是根据我的 NSLog 的。

不管怎样,无论有没有 UIWebView,我讨论过的按钮在横向模式下都会移动到 TabBar 下方,但不会向上滚动看到。当我“大力”滚动时,我看到它位于 TabBar 后面,但随后它“回落”到 TabBar 后面。

最后,这就是我询问 TabBar 和 NavigationBar 高度的原因,因为 TabBar 位于 UIView 的底部,而 NavigationBar 将 UIView 向下推。

现在,我要在这里添加一两条评论,因为它们在早些时候是没有意义的。

由于没有 UIWebView,我将一切保留为 IB 所看到的样子。

对于 UIWebView,我将 UIWebView 的 frame.height 增加到其 contentHeight,并向上调整围绕所有子视图的周围 UIScrollView 的高度。

好吧,你已经有了。


做这样的事情吗?

    NSLog(@"Navframe Height=%f",
        self.navigationController.navigationBar.frame.size.height);

快速版本是位于这里 https://stackoverflow.com/questions/7312059/programmatically-get-height-of-navigation-bar/27471214#27471214


UPDATE

iOS 13

As the statusBarFrame已弃用于iOS13你可以使用这个:

extension UIViewController {

    /**
     *  Height of status bar + navigation bar (if navigation bar exist)
     */

    var topbarHeight: CGFloat {
        return (view.window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0.0) +
            (self.navigationController?.navigationBar.frame.height ?? 0.0)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式获取导航栏的高度 的相关文章

随机推荐

  • 在 ngrx 上创建非记忆选择器

    是否可以在 ngrx 上创建非记忆选择器 我有一个非常小的选择器来检查存储中的值是否大于 Date now export const selectAuthState createFeatureSelector
  • Where 子句返回所有行中的值错误?

    我有一个如下所示的查询 SELECT id username FROM table name WHERE username 0 当我运行此查询时 MySQL 返回 table name 中的所有行 此外 如果我用 0 代替 false 我会
  • 如何在 Delphi 控制台应用程序中运行控制台应用程序?

    我希望我的控制台应用程序启动另一个控制台应用程序 显示另一个应用程序想要显示的所有内容 然后在另一个应用程序完成并退出后执行某些操作 基本上 Writeln Started ShellExecute 0 open another exe n
  • 处理Oauth 2.0-facebook gem错误100:此授权码已被使用

    我一直在为我的 Rails 应用程序设置 Facebook 身份验证 在测试时 使用我的 Facebook 帐户登录后 我不断收到此错误 OAuth2 Error error message This authorization code
  • Django:编程错误关系不存在

    设置新数据库heroku我试过python manage migrate并得到许多与相关的异常relation already exists does not exists 所以我按照这里的说明进行操作django 1 9 编程错误 关系
  • 如何避免添加多个 NSNotification 观察者?

    目前 API 似乎没有提供一种方法来检测是否已为特定 NSNotification 添加了观察者 除了在端维护一个标志来跟踪之外 避免添加多个 NSNotification 观察者的最佳方法是什么 有人已经创建了一个类别来促进这一点吗 防止
  • 如何设置 CirclePageIndicator 上的项目限制?

    I m using a ViewPager and a CirclePageIndicator from ViewPagerIndicator lib to show images with some circles below but t
  • Shadow DOM v1 CSS 填充

    https developers google com web fundamentals getting started primers shadowdom https developers google com web fundament
  • 如何在实体框架代码优先中设置 0..* 关系?

    我有两个类的下一个代码 public class Object public int ObjectID get set public int Object2ID get set public virtual Object2 Object2
  • MediaButtonIntentReceiver 在 Android 4.0+ 中不工作

    目标是拦截来自耳机以及蓝牙的广播 以响应来自耳机的不同类型的点击来改变媒体播放器 该解决方案适用于 ICS 之前的所有版本 这是我尝试过的一些代码和事情 private BroadcastReceiver mediaButtonReceiv
  • Wicket、页面堆栈和内存使用情况

    Wicket 应用程序序列化并缓存所有页面以支持有状态组件 以及支持后退按钮 以及其他可能的原因 我有一个使用 setResponsePage 在屏幕之间导航的应用程序 在很短的时间内 会话就会变得相当大 因为所有先前的页面都存储在会话中
  • 如何在 IIS 7.5 中启用 GZIP 压缩

    我想使用 GZIP 压缩我的文件 您能分享一下使用 GZIP 压缩文件的 web config 代码吗 上传 web config 文件后还需要做什么吗 GZip 压缩可以直接通过 IIS 启用 首先 打开IIS 转到您希望调整的网站并点击
  • 在 Docker 中使用私有模块构建 Go 应用程序

    我正在尝试在依赖于私有子模块的 docker 容器中构建一个 go 项目 我本来希望 mount type ssh会将我的 ssh 凭据传递给容器并且它会起作用 目前我可以在本地构建 只需制作GOPRIVATE变量集和git config
  • 从代码中获取全局色调颜色

    有没有办法通过代码从我的项目中获取全局色调颜色 为了避免误解 我指的是全局色调 我可以在文件检查器中设置它 Easy 目标C UIColor tintColor self view tintColor Swift let tintColor
  • 根据其他数据框的函数创建新的数据框

    我是 R 的新手 所以我可能很难提出我的问题 请多多包涵 我有两个数据框 为了解释起见 我们假设 df1 柱形代表收益类型 玉米 燕麦 小麦等 行代表一年中的月份 一月 二月等 Elements 代表在该特定月份购买的增益类型的每吨价格 d
  • 从Sql服务器中选择表并将数据插入到Mysql表中

    我有一个正在运行的 ms sql 服务器 并且希望将一些数据复制到 mysql 数据库 我已经可以连接到它们 所以我做了类似的事情 pdo new PDO SQLSERVER user password sql SELECT id name
  • 在 swift 中使用 UUID() 和 json

    我在网上找到了在 json 文件中使用硬编码 uuid 的示例 并且这些示例非常适合我 但是当我在应用程序中添加从 json 数组中删除项目的功能时 我需要动态创建这些 uuid 这是我的json文件 list json 它曾经有硬编码的i
  • Objective-C 中的二叉树

    我正在学习算法和数据结构 并尝试使用 Objective C 设计和实现二叉树进行训练 到目前为止 我有以下课程 main 供测试用 Node 树的节点 BinaryTree 对于与树相关的所有方法 最早的方法之一BinaryTree我实现
  • 创建一个过程来检索表上的所有索引并重建

    我想创建一个过程来检索表上的所有索引并重建 我用这个查询检索所有索引 select index name from user indexes where table name your table name 我用这个查询重建 alter i
  • 以编程方式获取导航栏的高度

    我知道更多视图控制器 导航栏 的存在将 UIView 的高度推低 我也知道这个高度 44px 我还发现这种下推可以维持 self view frame origin y 0 那么 除了将其设置为常量之外 如何确定该导航栏的高度呢 或者 更短