如何将某些视图的自旋转限制为单一方向,同时允许其他视图的所有方向?

2024-04-27

这个问题是关于 iOS 设备旋转和 UINavigationController 中的多个受控视图。有些观点应该是仅限于纵向方向,有些应该自由自转。如果您尝试使用三个视图创建最简单的设置,您会注意到自动旋转行为有一些非常令人讨厌的怪癖。然而,这个场景非常简单,所以我认为我要么没有正确执行自动旋转实现,要么我忘记了一些东西。

我有一个非常基本的演示应用程序,它展示了它的怪异之处,我制作了一个视频来展示它的实际情况。

  • 下载应用程序(XCode 项目) http://grabs.epologee.com/86a550fe0c65cd7d8ab0b3c346a342f7.zip
  • 将课程视为要点(相当冗长) https://gist.github.com/b8670e5976635a629842
  • 观看问题视频(YouTube,2分43秒) http://www.youtube.com/watch?v=pugXOhTbJaY

设置非常基本:三个视图控制器称为FirstViewController, SecondViewController and ThirdViewController全部延伸一个AbstractViewController显示带有类名的标签,并返回 YESshouldAutorotateToInterfaceOrientation:当设备处于纵向时。 SecondViewController 重写此方法以允许所有旋转。所有三个具体类都添加了一些彩色方块,以便能够通过将控制器推入/弹出来在视图之间导航。UINavigationController。我想说,到目前为止,这是一个非常简单的场景。

如果您以纵向或横向方向握住设备,这就是我不仅想要实现而且也期望的结果。在第一个图像中,您看到所有视图都是“直立”的,在第二个图像中,您看到只有第二个视图控制器反向旋转设备的方向。需要明确的是,应该可以从横向模式下的第二个视图导航到第三个视图,但由于第三个视图仅支持纵向方向,因此它应该仅以纵向方向显示。查看结果是否正常的最简单方法是查看承载杆的位置。

但这个问题就在这里,因为实际结果完全不同。根据您旋转设备时所处的视图以及您接下来导航到的视图,视图将不会旋转(具体来说,didOrientFromInterfaceOrientation:方法从未被调用)。如果您在第二个屏幕上处于横向状态并导航到第三个屏幕,它将与第二个屏幕具有相同的方向(=坏)。然而,如果您从第二个导航回到第一个,屏幕将旋转为“强制”纵向模式,并且无论您如何握住它,载体栏都将位于设备的物理顶部。视频更详细地展示了这一点。

我的问题有两个:

  1. 为什么第一个视图控制器旋转回来,而不是第三个?
  2. 当您只希望某些视图自动旋转而不希望其他视图自动旋转时,需要做什么才能从视图中获得正确的行为?

干杯, EP。

编辑:作为悬赏之前的最后手段,我完全重写了这个问题,使其更短、更清晰,并希望更吸引人给出答案。


简短的答案是您正在使用 UINavigationController,并且它不会像您希望的那样工作。来自苹果的文档:

为什么我的 UIViewController 不随设备旋转?

您的所有子视图控制器 UITabBarController 或 UINavigationController 不同意 一个共同的方向集。

为了确保您的所有孩子都能看到 控制器正确旋转,您必须 实施 应该自动旋转到界面方向 对于每个视图控制器代表 每个选项卡或导航级别。每个 必须就相同的方向达成一致 旋转发生。也就是说,他们 对于相同的情况,所有人都应该返回 YES 定向位置。

您可以阅读更多有关在这里查看轮换问题 http://developer.apple.com/library/ios/#qa/qa2010/qa1688.html.

您必须为您想做的事情滚动自己的视图/控制器堆栈管理。

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

如何将某些视图的自旋转限制为单一方向,同时允许其他视图的所有方向? 的相关文章

  • 如何在createQueryBuilder中使用通配符?

    在我的存储库类中 我使用 public function getItemsByTag tag qb this gt createQueryBuilder c gt select c gt where c tags LIKE bipolar
  • 使用 php 变量更改 css 类

    这里需要您的帮助 正如标题所示 我正在尝试使用 PHP 变量更改 css 类 所以基本上我想创建一个回显某些代码的循环 但我希望第一个循环中的 div 类有所不同 它应该被隐藏 这是我为使问题变得清晰而编写的简化代码 我不知道错误在哪里 请
  • 如何在 Angular 2 中订阅 DOMContentLoaded 事件?

    我正在将 UI 主题从 Angular 1 移植到 Angular 2 在第 1 个版本中 我有 viewContentLoaded事件 我想将其重新制作为 Angular 2 我正在尝试使用 HostListener DOMContent
  • 使用 Swift 解析框架

    有人尝试过将 Parse Framework 与 swift 一起使用吗 只要添加桥接文件 您就可以使用 swift 和 Objective C 代码 这是我的查询 从 Parse 返回的 对象 数组正确地包含了我的所有数据 但该方法在将
  • 为什么 .each 在我的 Rails 视图中完成后会重复数组? [复制]

    这个问题在这里已经有答案了 在我的 Rails 视图页面中 我有以下循环 它应该循环遍历我的 tag list 数组并打印每个标签 由于某种原因 它在打印每个单独的标签后会重复该数组 例如 这个数组有两个元素 ruby python 每个方
  • addEventListener keydown 不起作用

    我在互联网上找到了一些基本的 Pong 代码 并尝试添加按键 代码在这里 http cssdeck com labs ping pong game tutorial with html5 canvas and sounds http css
  • Selenium Python 使用代理运行浏览器[重复]

    这个问题在这里已经有答案了 我正在尝试编写一个非常简单的脚本 该脚本从 txt 文件获取代理 不需要身份验证 并用它打开浏览器 然后沿着代理列表循环此操作一定次数 我确实知道如何打开 txt 文件并使用它 我的主要问题是让代理正常工作 我见
  • Google 地图 api 中的 infoWindow 数组

    我寻找错误 但找不到它 由于某种原因 任何谷歌地图信息窗口总是显示相同的信息 这是一个咖啡脚本代码 infowindow new google maps InfoWindow for company in companiesData mar
  • 使用 OpenLayers 动态添加自定义标记到地图

    我想让用户在地图上添加自定义标记以及每个标记的描述 任何提示 任何教程的链接都会非常有用 您可以注册一个函数来在地图上 点击 事件 当用户单击它时 会自动添加该标记 尝试这样的事情 map is your map created using
  • 使用 PowerShell 检查 AD 中是否存在组

    我想为该组创建代码来检查该组是否存在 但是 我无法开始工作 因为它成功地将用户和组的部分成员仅添加到一个组中 而不是其他组 因为我设法在活动目录中创建一个组并从 csv 中读取 这是我的代码和结果 似乎在成功添加用户并添加组成员后我总是收到
  • git stash 和编辑帅哥

    我完全喜欢git add p and git stash但我偶尔会遇到以下问题 该问题是通过以下命令序列重现的 git add p my file 然后我手动编辑大块 using e 因为 git 建议的分割不适合我 git stash k
  • 如何在 yii 中设置 cron 作业

    我是 yii 的新手 我正在做一个项目 我写了一个向客户发送自动提醒的功能 假设这个函数位于 url http somedomain com index php somecontroller someaction 我想为此网址设置 cron
  • python中匹配3个或更多相同的字符

    我正在尝试使用正则表达式在字符串中查找三个或更多相同的字符 例如 你好 不匹配 噢 会的 我尝试过做类似的事情 re compile 1 3 a zA Z re compile w 1 5 但似乎都不起作用 w 1 2 是您正在寻找的正则表
  • Android 使用非公历

    我正在创建一个DatePickerDialogFragment用户将在其中选择出生日期 我想确保我可以处理非公历日期 我无法更改在我的设备上使用的日历类型 Android 是否允许用户切换日历类型 如果是的话 步骤是什么 到目前为止我还没有
  • 如何在运行时更改 UIMenu 内 UIAction 的状态?

    如何更改 UIAction 的状态 目标是切换 UIMenu 内 UIAction 旁边的状态复选标记 更改 UIAction 的state通过存储在视图控制器中的引用似乎根本不会改变状态 我错过了什么吗 View Controller i
  • 在Java的System.out中以表格格式输出

    我正在从数据库获取结果 并希望将数据作为 Java 标准输出中的表输出 我尝试过使用 t 但我想要的第一列的长度变化很大 有没有办法将其显示在类似输出的漂亮表格中 Use System out format http java sun co
  • 将元素添加到 D3 圆包节点

    我正在尝试制作一个可缩放的圆形包装图 我希望每个子圆圈包含一个较小的图表 该图表始终具有相同的结构 即 4 列 只有条形的高度会改变 我尝试添加一个简单的rect到目前为止我的图表 但矩形没有添加到圆圈中并且是静态的 JS var marg
  • FindAsync 很慢,但是延迟加载很快

    在我的代码中 我曾经使用加载相关实体await FindAsync 希望我能更好地遵守 C 异步指南 var activeTemplate await exec DbContext FormTemplates FindAsync exec
  • 截断段落前 100 个字符并隐藏段落的其余内容,以通过更多/更少链接显示/隐藏其余内容

    我有一个超过 500 个字符的段落 我只想获取最初的 100 个字符并隐藏其余部分 我还想在 100 个字符旁边插入 更多 链接 单击更多链接时 整个段落应显示并编辑文本 更多 到 更少 单击 更少 时 它应切换行为 段落是动态生成的 我无
  • jvm 如何以及何时何地更改 Linux 的最大打开文件值?

    在linux中 每个登录用户的每个进程的最大打开文件数有限制 如下所示 ulimit n 1024 当我学习java nio时 我想检查这个值 因为channel在Linux中也是一个文件 所以我编写了一个客户端代码来不断创建socketC

随机推荐

  • 如何在 Ionic 中创建具有 + 和 - 按钮的输入框

    如何创建一个带有 和 按钮的输入框 单击哪个用户可以更改所选产品的数量 如下屏幕 这是 Ionic 2 的一个快速组合的示例 如果您使用 Ionic 1 您应该能够很容易地适应它 您只需要几个控制器 类函数来递增和递减 然后通过按钮调用它们
  • EF6/SQL Server Compact,基于代码的配置

    我正在尝试将我的 EF6 配置从myexe exe config编码作为解决方法empty DbProviderFactories node in machine config 问题 此处描述 https stackoverflow com
  • 从 Excel 与 VBA 调用时,VBA UDF 给出不同的答案

    以下 VBA 函数计算给定范围内包含公式的单元格数量 从 VBA 子程序调用时它可以正常工作 从 Excel 调用时 它返回区域中的单元格总数 来自 Excel 的调用是 CountFormulas A1 C7 即使该范围内只有两个带有公式
  • jQuery 数据表隐藏头部

    如果表没有任何数据 我想隐藏数据表标题 oTable topics showTopics dataTable bLengthChange false bStateSave true iDisplayLength 12 bScrollColl
  • 使用api在github中生成个人访问令牌

    有什么方法可以通过我的用户名和密码登录我的 github 帐户并使用 api 生成个人访问令牌吗 UPDATE 根据这个博客文章 https developer github com changes 2020 02 14 deprecati
  • 20个问题AI算法是如何运作的?

    包含 20 个问题的简单在线游戏 由极其准确的人工智能提供支持 他们怎么猜得这么好 您可以将其视为二分搜索算法 在每次迭代中 我们都会提出一个问题 这应该消除大约一半的可能的单词选择 如果总共有 N 个单词 那么我们可以期望在 log2 N
  • 从redis中检索大数据集

    一台服务器上的应用程序查询另一台服务器上运行的 Redis 查询的结果数据集约为 250kzrangebyscore objects locations inf inf这在应用程序服务器上似乎需要 40 秒 当使用命令执行时redis cl
  • 使用负等式表达式进行 resharper 自定义模式替换

    我在 resharper 中有一条规则来查找对 Nullable HasValue 的调用 T foo if foo HasValue And it offers to replace with a comparison directly
  • 当所有子记录满足条件时仅选择父记录

    我有两个表 A 和 B 当所有子项 表 B 中 满足条件时 我只需要父项 A 的行 如果 B 中的一行不符合条件 那么我不需要父 A 的行 我想我需要在这里使用存在 但不展示如何使用 以下是数据表 Table A Primary Key L
  • Dao 和服务接口的需求

    我是Spring Mvc的新手 在很多教程中 我发现有一个像这样的Dao接口 public interface StudentDAO public List
  • 将 Selenium HTML 测试自动转换为 JUnit 的方法?

    我在 Mac 10 6 6 上使用 Selenium IDE 1 0 10 for Firefox 我们的 QA 部门已经为 Selenium 创建了一些 HTML 测试 我需要将其转换为 Junit 在 IDE 中 我可以通过转到 文件
  • 使用 javascript/jquery 仅选择特定元素后面的文本

    如下面的代码片段所示 我有多个文本 div 其中有粗体部分 然后是换行符 然后是一段文本 我可以 find 粗体部分 但如何使用 javascript jquery 只获取粗体部分后面换行符后面的文本部分 div class thecont
  • 如何为 Android 应用实施 Google Play 许可? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话
  • Hadoop:处理大型序列化对象

    我正在开发一个应用程序来使用 Hadoop 框架处理 和合并 几个大型 java 序列化对象 顺序 GB 大小 Hadoop 存储将文件块分布在不同的主机上 但由于反序列化需要所有块都存在于单个主机上 因此它会极大地影响性能 我该如何处理这
  • 如何解析 iPhone 中本地存储的 XML 文件?

    如何解析 iPhone 中本地存储的 XML 文件 请使用代码片段帮我解决这个问题 我已经使用了 NSXMLParser 并且实现了它 我的资源中有 r xml 文件 我刚刚解析标题并使用 NSXMLParser 显示 r xml
  • 如何使弹性盒与需要截断文本的嵌套子项一起使用?

    要让 flex child 截断带有省略号的文本 可以给父级一个 min with 0 在我的项目中 子组件嵌套在几乎 10 个不同的弹性容器中 我是否需要给所有父母一个 min width 0 或者有更好的解决方法吗 sandbox ht
  • 呈现模型与被动视图

    我想知道上述两种模式之间的区别 当您考虑到您需要在表示模型模式中同步代码并且该代码位于表示模型本身中时 那么我认为这些模式非常相似 两者都将事件委托给演示模型 演示者 演示模型和演示者命令域模型 并且也观察域模型 当发生更改时 它们都与视图
  • 推送通知不会弹出带有入门套件的react-native-firebase

    我已经克隆了React Native Firebase 启动器 https github com invertase react native firebase starter并进行了初始设置 然后根据文档重命名项目 然后添加google
  • Clojure/Java:用于声音频谱分析的 Java 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以接受大量音频数据并返回给定频带内随时间变化的平均幅度的库 我已经在 comp dsp
  • 如何将某些视图的自旋转限制为单一方向,同时允许其他视图的所有方向?

    这个问题是关于 iOS 设备旋转和 UINavigationController 中的多个受控视图 有些观点应该是仅限于纵向方向 有些应该自由自转 如果您尝试使用三个视图创建最简单的设置 您会注意到自动旋转行为有一些非常令人讨厌的怪癖 然而