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 中的边界和帧大小 的相关文章

  • 如何防止 RealmSwift 列表中出现重复项?

    如何防止向列表中添加重复项RealmSwift 我有我的User作为领域对象 但真正的数据源是服务器 只是使用领域在本地缓存用户 当我从服务器获取当前用户数据时 我想确保存储在领域中的用户拥有来自服务器的所有播放列表 以及它们的曲目列表等
  • “同时创建 xib 文件”按钮已禁用

    我在创建时遇到这个问题UIView s子类 创建 例如 UIViewControllers or UITableViewCells没关系 为什么会出现这种情况 I create view using cmd N and Xcode Vers
  • 如何在 Apple Watch Extension/App 和 iOS App 之间建立通信通道

    我正在探索 WatchKit SDK 当我有 WatchKit 应用程序时 是否可以在 WatchKit 应用程序上从 iPhone 应用程序设置值 例如文本 设置 我可以从 iPhone 应用程序调用 WatchKit 应用程序扩展中的函
  • 由于语言错误,Itunes Connect 无法提交

    Thats all it shows https i stack imgur com 0aZm8 png 我不确定它没有告诉我出了什么问题 it shows its linked to the language https i stack
  • Swift 3 错误:[_SwiftValue pointSize] 无法识别的选择器发送到实例

    我刚刚将我们的项目迁移到 swift 3 发现由于一个问题导致大量崩溃 由于未捕获的异常 NSInvalidArgumentException 而终止应用程序 原因 SwiftValue pointSize 发送到实例的无法识别的选择器 该
  • 自动布局、UIDynamics 和动画

    我对自动布局还很陌生 并且对如何为视图设置动画感到困惑 我读了很多 我知道你必须遵守限制 编辑它 然后包装layoutIfNeeded in an UIView动画块 但当真正要做的时候 我却有点失落 我很乐意有人能向我解释如何做这个动画
  • iOS 11 安全区域布局指南向后兼容性

    启用安全区域布局指南是否与 iOS 11 以下版本兼容 我设法使用新的安全区域布局指南并保持与 iOS 9 和 iOS 10 的向后兼容性 编辑 正如 NickEntin 的评论所指出的 此实现将假定存在状态栏 但在 iPhone X 的横
  • 玻璃效果 UIView

    我想知道如何在 UIView 上添加玻璃效果 我想像这样的效果 http pttrns com pickers detail 0dc9d9f6c6a7577613b3453768eee3b3在灰色半透明视图上 您 可以在这里看到 Thank
  • ITMS-90535 无法使用最新的 Google Signin SDK 发布 iOS 应用程序

    我正在使用 xcode 7 GM 种子并通过 cocoapods 安装了最新的 Google Signin SDKpod Google SignIn 当我尝试将我的应用程序发布到苹果应用程序商店时 我收到附加错误 Help 以下是 Goog
  • 为什么我的 tableView 函数运行了 3 次?

    我有一个 UITableView 并且有执行它所需的方法之一 func tableView tableView UITableView numberOfRowsInSection section Int gt Int println sec
  • 避免“在此块中强烈捕获自身可能会导致保留周期”消息

    每次我必须在块内使用全局变量或属性时 如下所示 self save if isItSaving NO self saveMyFile 我必须像这样重写 BOOL iis isItSaving id myself self self save
  • 混合静态和动态 UITableViewController 内容会导致 NSRangeException

    我一直在寻找这个错误 并找到了一些具有类似行为的帖子 但没有解决问题的解决方案 我有一个 UITableViewController 在 SB 中声明为静态 它具有以下部分 第 0 部分 配方 是静态的 有 4 个单元格 第 1 部分 口味
  • iPhone 快照,包括键盘

    我正在寻找拍摄整个 iPhone 屏幕 包括键盘 的正确方法 我找到了一些截取屏幕的代码 CGRect screenCaptureRect UIScreen mainScreen bounds UIView viewWhereYouWant
  • Objective C UIImagePNGRepresentation内存问题(使用ARC)

    我有一个基于 ARC 的应用程序 它从 Web 服务加载大约 2 000 个相当大 1 4MB 的 Base64 编码图像 它将 Base64 解码后的字符串转换为 png图像文件并将其保存到磁盘 这一切都是在一个循环中完成的 我不应该有任
  • 应用程序传输安全已禁用,但仍然出现 SSL 握手错误

    我在通过 HTTPS SSL 连接到 API 时遇到问题 我已经使用下面的字典完全禁用了应用程序传输安全性 ATS 尽管 SSL 证书通过了 NSCURL 的所有测试
  • 检查 touchend 是否在拖动后出现

    我有一些代码可以更改表的类 在手机上 有时表格对于屏幕来说太宽 用户将拖动 滚动来查看内容 但是 当他们触摸并拖动表格时 每次拖动都会触发 touchend 如何测试触摸端是否是触摸拖动的结果 我尝试跟踪dragstart和dragend
  • iOS WKWebView.scrollView委托导致BAD_ACCESS

    我的 viewController 有一个 UIView 属性 其中包含一个 WKWebView 我将 WKWebView rollView 委托设置为我的 viewController 它是我的 UIView 子类的公共函数 并在我的 v
  • 我应该在哪个方法中设置 UITextField 的委托?

    在 viewDidLoad 或 init 方法中设置 UITextField 的委托是一个好习惯吗 我尝试在 init 方法中将委托设置为 self 但它没有调用相应的委托方法 当我将代码移动到 viewDidLoad 中时 它注册为将 s
  • 显示键盘时如何在 TextView 下方添加更多填充

    当我在 ScrollView 中有 TextField 并点击它时 键盘会按预期显示 但似乎 TextField 已向上移动到足以显示输入区域 但我希望移动到足够的位置 以便整体可见 否则它看起来像是被剪裁了的 我找不到改变这种行为的方法
  • 为什么这个 SKPhysicsJointPin 不能将这 2 个精灵保持在一起?

    我显然不太了解 SKPhysicsJoint 但是除了 Apple 文档之外 网上的信息还很少 下面的代码有什么问题 我认为应该保持头部和颈部永久连接 我的意图是它们就像两张带有大头针的纸 这样它们可以旋转一点 但不仅仅是完全分开 当我运行

随机推荐

  • 将大型 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