iOS7 Facebook 导航栏行为

2024-01-21

我的应用程序与 Facebook / Instagram 的 iOS7 应用程序具有或多或少相同的导航概念:

一个具有 5 个选项卡的 ContainerViewController,每个选项卡都有一个 NavigationController 作为 rootViewController。

我现在尝试为第一个选项卡的 navigationController 的 rootViewController 重现 Facebook 的 navigationBar 行为(-> 第一个“真正的”VC,而不仅仅是像 NavVC 这样的容器)。

我能够使用 UIScrollView Delegate 方法(scrollViewDidScroll:、scrollViewWillBeginDragging:、scrollViewDidEndDragging:)实现隐藏/显示导航栏

注意:navigationBar的frame.origin.y是手动偏移到顶部的。我没有使用

    [self.navigationController setNavigationBarHidden:]

到目前为止真的很顺利。但我面临两个问题,我想不出解决方案:

当我将新的 ViewController 推入第一个选项卡的导航堆栈时,导航栏保持隐藏状态。

为了解决这个问题,我在推送的 ViewController 的 viewWillAppear: 方法中执行此操作:

    CGRect navBarFrame = self.navigationController.navigationBar.frame;
    navBarFrame.origin.y = 20.0;
    [UIView animateWithDuration:0.3 animations:^{
        [self.navigationController.navigationBar setFrame:navBarFrame];
    }];

该动画与 iOS 的 navigationController 推送动画正确匹配。

问题:当我向后导航(弹出推送的 TO)时,导航栏保持可见。

我能够通过在两个 ViewController 上创建和设置一些属性来解决这个问题,但这是一个巨大的混乱,而且会变得更加hacky,因为我必须将 3 或 4 个不同的 ViewController 类型推送到这个导航堆栈上。

我的问题(最后-.-):

我怎样才能实现类似于 Facebook 的推送/弹出行为?

这就是我正在寻找的行为:一个干净的过渡,其中“旧”导航栏保持隐藏状态,并显示推送的 viewController 栏。

注意:屏幕截图是在新的“从左向右滑动返回”iOS7 手势期间拍摄的。

第二个问题:是否有一种方法可以实现全局处理程序,以便在任何 viewController 中创建此行为,而不必在每个 viewController 中实现scrollDelegate 逻辑? 我正在考虑一个符合 UIScrollView Delegate 的委托对象。

感谢您的帮助 :)


长话短说:我为此构建了自己的自定义容器。它提供了在选项卡之间切换以及在每个选项卡上推送新 ViewController 的功能。有点像 UINavigationController 和 UITabBarController 之间的混合体。

如果您需要更详细的答案,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS7 Facebook 导航栏行为 的相关文章

  • UICollectionView 设置列数

    我刚刚开始学习 UICollectionViews 我想知道是否有人知道如何指定集合视图中的列数 默认设置为 3 iPhone 肖像 我查看了文档 似乎找不到简洁的答案 对于 Swift 5 和 iOS 12 3 您可以使用4 以下实现为了
  • 如何本地化 iOS 故事板

    我有一个包含一些视图的 iPhone 故事板 例如 导航项标题名为News 应翻译为其他语言 当我向故事板添加新的本地化版本时 它会为新语言创建当前故事板的副本 在这里我可以更改导航项的标题 但对我来说它似乎不太有用 如果我的故事板包含 1
  • Facebook Graph API 的发布限制

    我使用 Graph API 一段时间了 我的应用程序的一个功能是它允许用户在他们的朋友墙上发布消息 不用担心这不是垃圾邮件 无论如何 API 是有限制的 它只允许一定数量的帖子 然后就会失败 我已阅读 Facebook 存储桶分配限制 但我
  • 使用 JSONKit 解析 JSON 文件

    我正在构建一个音叉应用程序 货叉应允许最多 12 个预设节距 此外 我希望允许用户选择一个主题 每个主题都会加载一组预设 不必使用所有预设 我的配置文件看起来像这样 theme A3 comment An octave below conc
  • iPhone 的翻译器?

    我对为 iPhone 制作一个解释器很感兴趣 这将是一个实验性的想法 但可能会很棒 我喜欢让我自 己的语言适合移动计算和数学的想法 我查阅了很多资料 发现有关 iPhone 上的口译员的信息很复杂 苹果会允许什么 我见过这个应用程序 这是一
  • 将您的应用程序链接到现有页面

    我搜索了又搜索 似乎找不到任何与此相关的信息 我们有一个 Facebook 页面 facebook com companyname 我们在 Facebook 上也有一个应用程序 apps facebook com companyname 我
  • 按升序对 NSDictionary 进行排序

    我正在尝试排序NSDictionary按升序排列 我正在使用这段代码 NSDictionary valDict self mGetDataDict key rowKey for NSString valueKey in valDict al
  • 依赖于不同队列上的另一个操作的 NSOperation 无法启动

    我有操作的依赖图 并且使用多个队列来组织各种操作流 例如 peopleQueue sitesQueue sessionQueue sessionQueue loginOp fetchUpdatedAccountOp peopleQueue
  • 广告标识符和标识符ForVendor返回“00000000-0000-0000-0000-000000000000”

    我已经实现了这个方法来获得advertisingIdentifier and identifierForVendor NSString advertisingIdentifier if NSClassFromString ASIdentif
  • SDK 和 iOS 部署目标。

    我使用最新的 SDK 4 1 构建项目并设置 iOS 部署目标 3 0 如果我使用4 0 sdk的某些方法 我可以在真正的iPhone 3 0上运行我的项目吗 您只能在 OS 3 设备上运行您的项目 如果有条件地编码围绕您想要使用的 OS
  • UIScrollView 与 UITabBarController 切断

    我有一个 UIScrollView 我将其放置在视图中 界面生成器文档 xib m h 但是 UIScrollView 的下半部分被剪切 并且由于我有一个 UITabBarController 而没有显示其下半部分 我在 appdelega
  • UITableViewCell 内嵌套 UIStackView 内的 UILabel 有时会被截断

    我的一个表设置中有一个表视图单元格 其中包含以下视图层次结构 外部水平 stackview 固定到单元格内容视图的尾部 前部 底部和顶部边缘 右侧标签固定到其父 stackViewHackView 的尾部 前部 底部和顶部边缘 在我的控制器
  • 使用标识符启动 iPhone 应用程序

    我正在尝试在我的应用程序中启动应用程序 例如 如果我按下 testApp1 中的按钮 它应该打开 testApp2 有没有办法用应用程序标识符来做到这一点 我听说过一种名为的未记录方法launchApplicationWithIdentif
  • Swift 单元测试 - 如何断言 CGColor 是它应该的样子?

    使用 Xcode V7 2 尝试进行单元测试 需要验证是否已设置正确的颜色 并收到以下消息 Cannot invoke XCTAssertEqual with an argument list of type CGColor CGColor
  • Swift - 保存在 TableView 中选择的复选标记

    我对 Swift 相当陌生 并且在 TableView 多重选择方面遇到问题 我有多个选择 可以用复选标记进行检查 类似于待办事项列表 当我检查项目时 我希望能够返回 ListView 并保存我的选择 我假设将其保持在已保存状态的代码将位于
  • iOS 搜索栏不显示结果

    更新 这实际上有效 我的自定义单元格的样式尚未出现 因此单元格看起来是空白的 那我怎样才能得到searchResultsTableView使用我的自定义单元格 我在表格视图中实现了搜索栏 当我调试时搜索 过滤所有工作 但是当我在搜索栏中输入
  • Facebook 登录打开错误的应用程序

    我正在尝试使用 facebook 实现应用程序的登录 但每次我尝试登录时 它都建议打开错误的应用程序 我尝试了一些在这里找到的东西 但没有成功 在 Facebook 的开发者页面上我添加了一个后缀 我的 plist 如下 有谁知道发生了什么
  • 如何制作像 Facebook 应用程序一样的登录屏幕?

    如何制作像 Facebook 应用程序一样带有 电子邮件 和 密码 文本字段的登录屏幕 Facebook登入 http extdesenv com wp content uploads 2012 05 facebook login ios
  • 带有自定义字体的 UILabel 错误呈现

    在我的 iPhone 应用程序中 我为所有 UILabel 设置了自定义字体 更准确地说 我对 UILabel 进行了子类化 重写了一个方法 在该方法中设置了自定义字体 然后将 IB 中的所有标签设置为该自定义类 现在的问题是 所有文本都渲
  • iOS 中是否需要 Google App Indexing SDK 才能使用 Google DeepLinking?

    我想用谷歌应用程序索引与我的网页和 iOS 应用程序 我支持通用链接 or 深层链接用谷歌术语 与苹果Search并相应地设置我的网页 From 谷歌文档 https developers google com app indexing i

随机推荐

  • 我可以在 Xcode 4 中禁用调试器吗?

    我不想使用调试器 gdb 尽管我想从我的应用程序获取输出 来自 stdout 和 stderr 我发现我从来不用它 我总是用NSLog 或者 对于 Cprintf对于 C std cout 如何禁用调试器 即使在调试配置中 接下来运行和停止
  • SQL Server - EBS存储设计

    我们正在亚马逊上规划新的 EBS 结构 以获得 SQL Server 的最佳性能 过程中也出现了一些疑惑 1 使用亚马逊计算器 http calculator s3 amazonaws com index html http calcula
  • 如何使用 Express .listen()(在 Typescript 中)处理错误?

    目前正在将我的项目转换为使用 Typescript 我之前在 Node 中启动 Express 的工作代码如下所示 server listen port error gt if error throw error console info
  • C++ 中的多个整数类型类

    我经常发现自己使用整数来表示不同 空间 中的值 例如 int arrayIndex int usersAge int daysToChristmas 理想情况下 我希望为 索引 年 和 天 这些类型中的每一个都有单独的类 这应该可以防止我意
  • 使用假域名在本地计算机上托管网站

    我正在尝试托管一个带有域名的网站 但仅在我的计算机上 或可访问同一网络上的其他计算机 可选 我不希望其他人在我的家庭网络之外访问该网站 我想使用假域名 例如 www SampleWebsite com 现在 当我在计算机上键入此网站地址时
  • 如何实现滚动固定效果?

    如果你看一下网站 http eyeheartworld org pages the cause http eyeheartworld org pages the cause 向下滚动 有一个我在 codepen 上找到的概念的实现 当你向下
  • locale.setlocale(LC_NUMERIC):如何使其在 Windows 上工作

    我的是Win10下 这是我的小脚本 import locale locale setlocale locale LC NUMERIC rus print locale localeconv fv 2 5 print str fv 这打印出
  • 应用程序图标未更改为使用 cordova 的自定义图标[重复]

    这个问题在这里已经有答案了 我正在尝试使用phonegap启动cordova应用程序 但无法更改iOS的默认应用程序图标 实际图标不是启动屏幕 默认图标始终被复制到资源 gt 图标文件夹中 而不是我的自定义图标 我已经使用了phonegap
  • 如何使用mpirun为不同的程序使用不同的CPU核心?

    我有一个 32 核的虚拟机 我正在运行一些模拟 需要同时使用 16 个内核 我使用以下命令在 16 个核心上运行作业 mpirun n 16程序名 args gt 注销2 gt 1 该程序在 16 个内核上运行 现在 如果我想在其余核心上使
  • 屏幕旋转时小部件上的按钮单击丢失

    我有一个非常简单的小部件应用程序 其中包含LinearLayout有背景和ImageButton In the AppWidgetProvider onUpdate 方法中 我注册了单击按钮来广播意图 当小部件首次加载时 一切运行正常并且点
  • 在 Perl 中,如何在命令行上发送 CGI 参数?

    通常我从网页获取数据 但我想从命令行发送它以方便调试 为了获取数据我做了类似的事情 my query new CGI my username query gt param the username 这似乎不起作用 script pl the
  • 如何获取 Flask-SQLAlchemy 对象来加载 Jinja 模板的关系子项?

    我有用户和帖子的基本模型 在我的用户模型中 我有 posts db relationship Post backref user lazy dynamic 但是 当我做类似的事情时 return render template user h
  • Django Rest 序列化程序在数据存在时中断

    我有这个模型 class MyModel User others fields 和这个序列化器 class MySerializer serializers ModelSerializer class Meta model MyModel
  • 在先前的 Beta 审核获得批准后,如何在 iTunes Connect 中激活新版本的外部 Beta 测试?

    我从 Xcode 提交了一个新版本 我在 Itunes Connect 上有一个预发布版本 我填写了所有信息 通过单击构建 版本 有关此之前版本的信息 我添加了外部用户 他们有 已添加 状态 但是当我打开 Beta 测试航班时 外部用户仍处
  • sql join - 仅选择第二个表中的顶行

    一个sql菜鸟 在表a中有一个客户代码 电话号码的列表 表b中有所有通话记录 我想从表 b 中为表 a 中的每个客户代码 电话号码选择最近的呼叫 到目前为止我有 SELECT A CustomerCode A PhoneNumber B S
  • 无法在 Windows 10 上使用 Vagrant 安装 Laravel homestead

    我刚刚下载了最新版本的 Vagrant 2 2 15 和 VMware 我试着跑 vagrant box add laravel homestead 但我得到 The box laravel homestead could not be f
  • iOS7 Safari 和 Chrome 中奇怪的 CSS 拉伸问题

    自从在多部 iPhone 和 iPad 上升级到 iOS 7 以来 我们发现我们网站上的部分 UI 发生了非常奇怪的情况 所附图像中的粉色框位于绝对定位的父级内 并且它有两个绝对定位在其中的白色 div 每个都有不同的不透明度 粉色圆圈只是
  • 按照SOLID编写JavaScript

    有人在开发 JavaScript 时使用过 SOLID 编程原则 或其任何部分 吗 我刚刚开始阅读它 但似乎找不到任何人将它用于 JS 我发现唯一易于实施 使用的部分是 单一责任原则 我正在寻找的是使用这些原则的文章或示例 是否有任何争论为
  • 将 POJO 映射到实体

    在我们的项目中 我们有一个限制 即无法更改现有的表结构 这些表本质上是高度非规范化的 我们为该应用程序提供了很好的 POJO 我们从现有表中生成了实体 bean 现在我们必须将 POJO 映射到实体 以便我们能够持久保存 最终 我们将一个好
  • iOS7 Facebook 导航栏行为

    我的应用程序与 Facebook Instagram 的 iOS7 应用程序具有或多或少相同的导航概念 一个具有 5 个选项卡的 ContainerViewController 每个选项卡都有一个 NavigationController