viewDidLoad 中的边界和帧大小

2023-12-28

我推了一个视图控制器(mainVC)并向其添加一些子视图。大多数这些视图都是在用户采取某些操作时按需构建的。

当我构建每个视图时,我参考mainVC.view.bounds调整视图大小。根据需求大小构建的就很好,但是第一个(我添加到viewDidLoad)似乎没有考虑到隐藏的导航栏或未隐藏的工具栏 - 我不确定是哪一个。

其他问题似乎让我确信 viewDidLoad 是引用边界并添加这些子视图的正确位置。我是不是被误导了?记录会产生以下结果:

In viewDidLoad边界高度为 548。

In viewWillAppear边界高度为 460 (-44 x 2)。在viewWillAppear我隐藏了导航栏,但是前后高度是一样的。

在以后的所有时间里,边界高度都是 504 (-44 x 1)。

为什么当我尝试读取它时,边界高度没有更新viewDidLoad?


视图控制器生命周期描述于查看 iOS 控制器编程指南 http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html.

简而言之,当-view被称为第一次,-viewDidLoad叫做。即使视图控制器对视图所做的第一件事就是设置框架,它仍然需要访问视图。

UIViewController *controller = [MyViewController myViewController];

// -viewDidLoad has not been called (if +myViewController doesn't call -view.)

UIView *view = [controller view];

// -viewDidLoad has been called.

view.frame = [UIApplication sharedApplication].delegate.window.bounds;

即使你使用controller.view.frame同样的逻辑顺序也会发生。-viewDidLoad将始终使用尚未嵌入视图层次结构的新反序列化视图进行调用。


Update

在这种情况下,之前不清楚,我指出为什么视图的边界没有正确设置-viewDidLoad。这只是之后-viewDidLoad视图控制器的视图是否添加到视图层次结构中。这是设置视图的最终帧的时间。

如果您必须使框架具有正确的尺寸,则可以使用 IB 设置您需要的尺寸,或者(如果您不使用 IB)将框架设置为-loadView。这种方法是有缺陷的,因为它静态地将帧的大小设置为一个可能在之后更改的值。-viewDidLoad被调用(如通话状态栏之类的东西)。


Update 2

您需要将添加子视图与定位和调整子视图大小分开。

如果您从 Storyboard 或 Nib 加载,那么您是对的,应该添加所需的其他视图-viewDidLoad。如果您以编程方式加载,则所有子视图都会添加到-loadView.

第二个任务是定位子视图并调整其大小。首选方法是使用UIView.autoresizingMask http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html#//apple_ref/occ/instp/UIView/autoresizingMask,但为了更精确的布局,KVO https://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/KeyValueObserving/KeyValueObserving.htmlview.bounds 并在视图控制器的视图更改其大小时调整自定义子视图。

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

viewDidLoad 中的边界和帧大小 的相关文章

  • 如何检查 iOS 分发配置文件是否启用了推送通知?

    我有一个应用程序应该启用推送通知 但由于某种原因没有启用它们 我见过其他人下载并安装了该应用程序 但它甚至没有提示他们授予发送推送通知的权限 正如预期的那样 此应用程序不会出现在其 设置 gt 通知 中 但是 在我的 iPad 上 我能够从
  • iphone sdk - 调用视图的超级视图的视图控制器的方法

    你好 我如何在当前视图中调用当前视图的超级视图的视图控制器中实现的方法 你能帮我吗 谢谢 通常这是通过代表完成的 让您的视图接口定义一个协议和对某个委托的引用 然后让你的父视图控制器实现这个协议 然后父母会这样做 someView fooD
  • UILocalNotification 播放自定义声音

    我在我的应用程序中实现了本地通知 但我只是想知道是否有一种方法可以播放不属于 iPhone 应用程序主包的一部分的声音 基本上在我的应用程序中 我希望用户录制生成本地通知时播放的声音 而不是播放预先录制的或默认的声音 据我所知 这是可以实现
  • 使用 iOS 7 检索设备 WiFi MAC 地址

    我们的应用程序使用设备 WiFi MAC 地址来唯一标识设备 根据苹果文档 https developer apple com news id 8222013a我们将开始使用 UIDevice 的identifierForVendor 属性
  • 如何从 GMSPlace 地址组件中提取街道、城市等

    我正在使用适用于 iOS 的 Google Places API 可以成功检索附近的地点并将地址显示为字符串 我想做的是提取地址组件 例如城市 以存储在数据库中 文档表明 GMSPlace 有一个 addressComponents 属性
  • 如何获取核心数据中现有实体(表)的列表

    如何获取核心数据中特定模式 托管对象模型 的现有实体 表 列表 我刚刚开始实施核心数据概念并坚持这些要点 就像是 SELECT COUNT FROM information schema tables WHERE table schema
  • 有什么方法可以让dispatch_queue_t在单线程中工作吗?

    这是我的代码 interface MyObject property nonatomic dispatch queue t queue end implementation MyObject NSThread check id init s
  • 根据一个属性对数组进行排序[重复]

    这个问题在这里已经有答案了 我有一个名为 NSMutableArrayallItems其中有以下内容ProductData目的 每个对象都有cid cname ctype and cimage 正如您在下面看到的 json 对象没有按顺序出
  • 什么是已弃用的推送转场? (iOS 8)[重复]

    这个问题在这里已经有答案了 我不知道在这种情况下已弃用意味着什么 我是编程新手 正在 Xcode 6 中制作我的前几个应用程序 今天我正在制作一个待办事项列表应用程序 当连接到用户可以输入新待办事项以添加到主表的场景时 我被邀请使用推送转场
  • -all_load 其他链接器标志导致第 3 方框架中的重复符号错误

    我有一个用于内部应用程序的静态库 其中包含一些常见的实用程序代码 从以前的 SO 帖子中 我发现为了在运行时加载静态库中的类别 我需要包括 all load ObjC在 构建设置 中的 其他链接器标志 字段中 但是 对于我也在使用的闭源第三
  • 使用 AVMutableVideoCompositionLayerInstruction 旋转视频

    我正在 iPhone 4 上使用前置摄像头拍摄视频 并将视频与其他一些媒体资源结合起来 我希望该视频为纵向 所有视频的默认方向都是横向 在某些情况下 您必须手动管理 我正在使用 AVFoundation 特别是 AVAssetExportS
  • iOS:如何在不降低 fps 的情况下播放音频?

    我正在使用 Sprite Kit 最好使用 Swift 库 为 iOS 9 开发游戏 目前 我正在使用 Singleton 在其中预加载音频文件 每个文件都连接到一个单独的 AVAudioPlayer 实例 这是一个简短的代码片段来了解这个
  • Flutter - 选择 TextFormField 时键盘不显示

    我目前遇到一个问题 当我选择任何一个时 键盘不会出现TextFormFielda 内的小部件Form小部件 这是表单的代码 位于我的内部CreateAccountForm有状态的小部件 import package flutter mate
  • NSCalendar 返回明年第一周上周一的错误日期

    我使用下面的代码使用随机日期来计算上周一 哪个工作文件但我的代码在明年日期中断 下面是相同的代码 NSDate date NSDate dateWithTimeIntervalSince1970 1483620311 228 NSLog c
  • UILocalNotification 在后台 10 分钟后不提示

    In didFinishLaunchingWithOptions调用函数的定时器循环httpRequest每 1 分钟间隔一次 BOOL application UIApplication application didFinishLaun
  • Swift 3:如何访问48字节CFData中matrix_float3x3的值?

    我正在尝试访问内在矩阵answer https stackoverflow com a 48159895 9296667 通过运行下面的命令 我能够得到一个 48 字节的任意对象 https developer apple com docu
  • scntool:无法转换文件,失败原因:*** -[__NSSingleObjectArrayI objectAtIndex:]:索引 1 超出范围

    我正在 Xcode 9 3 下开发一个基于 iOS 11 3 SceneKit 的项目 我有几个 dae 文件格式的 3D 模型 每当我构建项目时 其中一个模型不会被复制到最终的 iOS 包中 深入研究错误 我在复制捆绑资源构建阶段收到以下
  • 无法从 iOS 中的框架访问 .nib(XIB) 文件

    我已经从现有的代码库中创建了一个框架 并尝试在新的代码库中使用它 这很好用 但是当我尝试访问属于我的框架包的一部分的 nib 文件时 我的应用程序崩溃了 这是我用来访问视图控制器 XIB 文件的代码 testViewController c
  • 如何正确创建迦太基 cartfile?

    我正在研究购物车文件 迫不及待地想 简单地创建一个购物车文件 就像所有说明所说的那样 只是 如何 简单地 创建一个 Cartfile 我创建了一个纯文本文档 将其命名为 cartfile 并在其中复制了一些依赖项 Ran carthage
  • 如何使用 NSUserDefaults 正确工作(检索值)

    我的代码中有一个简单的方法 如下所示 BOOL isFirstTimeLogin NSString t gName NSString stringWithFormat NSUserDefaults standardUserDefaults

随机推荐

  • 将大型 CSV 从 Cloud Storage 导入 App Engine 数据存储区

    我有一个大的 CSV 文件 大约 1 GB 大 并且想要在数据存储中创建实体 每行一个实体 该 CSV 文件当前驻留在 Google Cloud Storage 中 有没有一种干净的方法来做到这一点 我可以在网上找到的所有示例似乎都依赖于本
  • DataTriggerBehavior 不适用于 Enum?

    我正在尝试使用DataTriggerBehavior来自行为 SDK 但它似乎不适用于枚举 否则我做错了什么 您可以假设DataContext对于这些例子来说是这样的 INotifyPropertyChanged已实现 但我不打算在这里展示
  • 即使服务帐户具有“所有者”权限,也会引发权限不足的错误

    In 谷歌云平台我创建了一个服务账户并分配了OWNER and 服务帐户参与者 role 当我运行下面的命令时 gcloud container clusters get credentials travis test zone us ce
  • 我有一些关于 WebView 的问题

    我无法正确使用WebView 当我运行我的应用程序时 出现 使用什么 窗口和按钮 浏览器 Chrome 排序 单击 取消 时没有任何反应 我的代码没有错误 我真的不知道如何正确使用WebView 请帮我 使用什么 窗口 https i st
  • Redis 流水线执行顺序

    我正在使用 rub redis gem 想知道我是否这样做 例如 redis pipelined do REDIS del users current user id i unread REDIS lpush users current u
  • 如何附加到切片指针接收器

    我有一个切片的类型别名 当切片是指针接收器时 我希望能够附加到切片 或切片中的过滤器 package main import fmt type itself string func h itself appendToItself test
  • 需要同意才能将文件的所有权转让给其他用户 [Google Drive API]

    我有一个与 1 个用户 所有者 Gmail 帐户 和第二个用户 作者 Google 服务帐户 如 iam gserviceaccount com 共享的 Google 表格文件 我使用此函数由用户 2 从用户 1 复制表 并再次使复制文件的
  • 管理 JavaScript 应用程序的时区和 DST 问题

    我正在尝试创建一个调度应用程序 前端 UI是使用JavaScript开发的 后端是一个 ASP NET Web Api 应用程序 使用 MSSQL 服务器作为数据库 从 UI 中 用户将安排一个可以每天 每周 每月运行的作业 每个作业最多可
  • 使用 Nokogiri(而不是 Tidy)清理 HTML

    The tidygem 不再维护 并且存在多个内存泄漏问题 有些人建议使用Nokogiri 我目前正在使用以下方法清理 HTML Nokogiri HTML DocumentFragment parse html to html 不过我有两
  • 从 Eclipse 运行时,Java JFrame 窗口不出现

    一个非常简单的问题 我尝试运行一个非常简单的演示来从 Eclipse 创建并显示一个窗口框架 但没有任何反应 没有错误 没有窗口 代码运行完成 我添加了断点并确保代码按预期运行 该代码直接来自 Java 教程 FrameDemo 我只是重命
  • 删除 WWW 的表单。并在输入上打印结果?

    我需要制作一个类似于 缩短链接 网站使用的表格 它应该简单地删除 WWW 并回显结果 以便我稍后在其周围添加我的代码 例如 如果用户输入 www pizza com blablabla 单击输入应显示 pizza com blablabla
  • 创建一个简单但灵活的模板引擎

    我正在尝试构建一个基本的模板引擎 就像已经作为开源提供的模板引擎一样 我正在使用搜索和替换技术 然而 由于搜索和替换必须进行硬编码 因此不太灵活 我的意思是 作为一个例子 我正在使用这样的东西 templateMarkup div clas
  • 无法使 Oauth PHP 扩展正常工作

    当我尝试使用 PHP 进行 oAuth 之旅时 我感到很抓狂 我正在使用 MAC OSX 10 7 4 MAMP PHP 并且我指向 MAMP 环境中的 php 我已经下载了最新的 oAuth php 扩展 1 2 2 我跑过 pecl i
  • IN r,如何将摘要结合在一起

    假设我有 5 组数据的 5 个摘要 我怎样才能得到这些数字或将摘要合并为 1 而不是 5 V1 V2 V3 V4 Min 670 2 Min 682 3 Min 690 7 Min 637 6 1st Qu 739 9 1st Qu 737
  • 解压后无法删除压缩文件

    我试图在 Windows 上解压内容后删除压缩文件 内容可以存储在 zip 中的文件夹结构中 我正在使用with声明并认为这会关闭类似文件的对象 sourcevar 和 zip 文件 我删除了与保存源文件相关的代码行 import zipf
  • AVX2 的 gcc 目标禁用 SSE 指令集

    我们有一个要使用 AVX2 编译的翻译单元 仅此一个 它预先告诉 GCC 文件中的第一行 pragma GCC target arch core avx2 tune core avx2 这曾经适用于 GCC 4 8 和 4 9 但从 6 开
  • SqlAlchemy 的外键问题

    我收到错误 无法从字符串 MACHINE IE 解析 rfc1738 URL 当我尝试导入以下内容时 class MACHINE declarative base tablename MACHINE MACHINE UID Column I
  • 替换 OpenXML 中的内容控件

    我需要一些东西作为占位符 我起初将内容控制视为解决方案 但我遇到了一些问题 然后 我考虑将 CustomXML 添加到 docx 但由于 i4i 诉讼而放弃了这一做法 然后我决定通过 OpenXML SDK 2 0 简单地更改内容控件的文本
  • 如何使用 Prisma 动态生成的包部署到 Vercel

    我正在使用 Prisma 和 Vercel Prisma 动态生成 Prisma 客户端 但 Vercel 会缓存旧客户端并且不会重建它 除非我登录 Vercel 并单击 重新部署 这会强制它重新安装所有软件包 有没有办法强制这个包在我每次
  • viewDidLoad 中的边界和帧大小

    我推了一个视图控制器 mainVC 并向其添加一些子视图 大多数这些视图都是在用户采取某些操作时按需构建的 当我构建每个视图时 我参考mainVC view bounds调整视图大小 根据需求大小构建的就很好 但是第一个 我添加到viewD