viewWillTransitionToSize 和错误的 navigationBar 和 statusBarFrame 高度

2024-01-25

我正在尝试获取 GLKViewController 子类的可见绘图区域。在 iOS 7 中,我将确定方向,然后相应地调整 [UIScreen mainScreen].bounds.size。然后我会减去 navigationBar 和 statusBarFrame 的高度,瞧! - 我的绘图区域的实际大小。

现在我尝试使用 viewWillTransitionToSize 更新 iOS 8,但是当我旋转设备(我打开了 UIInterfaceOrientationMaskAll)时,传递的大小是错误的。事实上,宽度对于视图来说是正确的,但高度不正确(这涉及导航栏和状态栏的高度)。

我已经看到了一些与此相关的问题,但没有任何内容真正涉及这个问题,至少没有任何内容对我有帮助。

在我看来,这似乎没有做任何有趣的事情,如果我错了,请纠正我:

- (void)viewWillTransitionToSize : (CGSize) size
       withTransitionCoordinator : (id<UIViewControllerTransitionCoordinator>) coordinator
{
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

    NSLog(@"size changed : orig(%f,%f) mainScreen(%f,%f)", size.width, size.height, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);

    [self updateViews:size];
}

过渡到横向的输出:

size changed : orig(568.000000,256.000000) mainScreen(320.000000,568.000000)

其中从 viewWillTransitionToSize 传递的高度似乎是:

320 - (2*32) = 256

然后下一次旋转为纵向:

size changed : orig(320.000000,536.000000) mainScreen(568.000000,320.000000)

其中从 viewWillTransitionToSize 传递的高度似乎是:

568 - 32 = 536

32恰好是横向模式下导航栏的高度(如果这意味着什么)。

所以我的问题是: viewWillTransitionToSize 如何获得这个大小?它如何考虑根据方向改变大小或消失的额外条形?最重要的是,为什么它使用这些不正确的高度?


查看视图框架尺寸时viewWillTransitionToSize:withTransitionCoordinationar:,您可能会在更新之前获得帧。

更好用animateAlongsideTransition:completion:在这个方法里面:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    [super viewWillTransitionToSize:size
          withTransitionCoordinator:coordinator];


    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context)
    {
          //update views here, e.g. calculate your view
    }
                                 completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
     {
     }];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

viewWillTransitionToSize 和错误的 navigationBar 和 statusBarFrame 高度 的相关文章

  • ld:找不到 -lGoogleToolboxForMac 的库

    我正在通过 pod 实施 firebase 设置 我的 Pods 文件如下所示 Uncomment the next line to define a global platform for your project platform io
  • 如何在 Swift 中“生成”闭包类型别名?

    为了使我的代码更易于阅读 我在 Swift 中对各种类型的闭包使用类型别名 我有以下基本的闭包集 public typealias FailureClosure error NSError gt Void public typealias
  • Swift - 我可能已经删除了 Apple Swift Packages 集合

    我对 swift 和 XCode 很陌生 昨天我正在开发一个项目 想尝试一下某人制作的自定义日期选择器 所以我转到 添加包 并粘贴 GitHub 链接并添加它 我已经在我的项目中添加了一个名为 KeychainAccess 的不同包 方式
  • 在 Swift 中有条件导入基于 iOS 版本的框架(如 Speech)?

    有没有办法有条件地导入框架Swift基于运行时 iOS 版本 特别是 我有一个部署目标为的应用程序iOS 8 我想使用新的Apple Speech应用程序中的框架 如果在运行时可用 我知道 available iOS 10 代码部分的指令
  • iOS 9.3 中的 KVO 被破坏

    这可能是 iOS 9 3 发行版 中的一个可怕的错误 添加单个观察者时 NSUserDefaults standardUserDefaults 我注意到响应方法 observeValueForKeyPath ofObject change
  • 寻找可靠的方法来选择iPhone 13微距相机设备

    我正在使用 objc 开发一个应用程序 我必须选择 iPhone 13 Pro 和 13 Pro Max 中配备的新微距摄像头 目前 我在所有其他设备上选择我的相机 并剪掉此代码 AVCaptureDeviceDiscoverySessio
  • UICollectionViewCell 拖动预览的自定义视图

    我正在尝试实现一项功能 用户可以将一个集合视图单元格拖放到另一个集合视图单元格上 但是 我想完全更改运动中物体的预览 以匹配我的应用程序的视觉隐喻 该项目没有移动 该项目包含的东西正在移动 例如 假设我的collectionview单元格显
  • 如何在ios开发中从mp3文件中提取元数据

    我正在开发一个带有云存储的 ios 音乐播放器 我需要提取音乐信息 如标题 艺术家 艺术作品 我有一个名为 playit 的操作 可以播放和暂停 mp3 文件 它还应该使用与 mp3 文件关联的元数据来填充一些 UILables 和 UII
  • 核心数据executeFetchRequest消耗大量内存

    我正在核心数据数据库中插入 cca 100 000 条记录 数据库包含 3 个实体 球员 俱乐部 球员俱乐部 实体之间存在关系 玩家 gt 玩家俱乐部俱乐部 在 PlayerClub 中插入时 我注意到插入大约 50 000 条记录后会消耗
  • ios GPUImage,小尺寸图像处理效果不好?

    我正在尝试为 OCR 准备图像 我使用 GPUImage 来完成 代码工作正常 直到我裁剪图像 裁剪后我得到了糟糕的结果 作物面积 https www dropbox com s e3mlp25sl6m55yk IMG 0709 PNG h
  • 我可以安全地将 UInt32 存储到 NSUInteger 吗?

    在标头中 它的定义如下 if LP64 TARGET OS EMBEDDED TARGET OS IPHONE TARGET OS WIN32 NS BUILD 32 LIKE 64 typedef long NSInteger typed
  • XOR或其他简单的文件混淆方法ios目标c

    我正在开发一个使用受版权保护的 pdf 文件的 ios 应用程序 我正在寻找一些简单的方法来混淆文件以确保安全 这些方法不需要我经历额外的大众市场 CCATS 加密审查流程 但也将确保版权所有者已尽我所能来保证他们的数据安全 当然 我用密码
  • Xcode 7.2 无法连接到装有 iOS 9.2 的 iPhone

    出于开发目的 我已经在我的 iPhone 5s 上安装了 iOS 9 2 beta 当然 我还安装了Xcode 7 2 beta 当我想在设备上运行应用程序扩展 键盘 时 该应用程序会正确构建 安装在 iPhone 上并启动 然而 然后我在
  • Swift 字典映射 - 闭包中的 init

    我有 Swift 字典 private var params String AnyObject 这包含查询项目 例如 lat 40 lon 100 我想将这本词典映射到NSURLQueryItem大批 我想让它 迅速 params map
  • 在 Swift 中计算两个 CLLocation 点之间的方位角 [重复]

    这个问题在这里已经有答案了 我正在尝试计算仅 swift 代码中两个 CLLocation 点之间的方位 我遇到了一些困难 并假设这是一个非常简单的函数 堆栈溢出似乎没有列出任何内容 func d2r degrees Double gt D
  • 辅助功能标识符在 iOS 模拟器的辅助功能检查器中不可见

    我想使用辅助功能检查器来验证在模拟器 iOS 9 2 中运行的应用程序中的所有辅助功能标识符 辅助功能检查器能够返回多个辅助功能字段 但不能返回标识符 知道为什么以及如何我能看到它们吗 实际上有一种方法 克里斯 普林斯 Chris Prin
  • 在 UIScrollView 中禁用 2 根手指滚动

    我想在我的应用程序中禁用两指滚动UIScrollView 我对其进行了子类化 并使用以下代码调整了其内置手势识别器 for UIGestureRecognizer mgestureRecognizer in scroller gesture
  • 当键盘出现时调整 UITextView 的大小

    我想在键盘出现时调整文本视图的大小 我的代码如下 我打开了自动布局 因此使用来自超级视图的 textView gt bottom 空间的约束 并通过 IBOutlet distanceFromBottom 引用它 void keyboard
  • ios swift 如何将默认语言设置为阿拉伯语?

    我正在开发一个有两种语言的应用程序 即英语和阿拉伯语 我用英语编写了该应用程序 然后用阿拉伯语本地化了该应用程序 更改语言时需要重新启动应用程序 我唯一的问题是 第一次安装应用程序时如何将默认语言设置为阿拉伯语 我尝试在编辑方案部分将语言设
  • 为什么我收到 com.facebook.sdk.login 错误 308?

    我正在使用 Xcode 7 0 在 iOS 9 0 2 上进行测试并使用 Facebook SDK 4 7 0 当我登录用户时 大多数时候一切都正常 但有时我不断收到此错误 但我不知道为什么 操作无法完成 com facebook sdk

随机推荐