• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 如何在初始化过程中及早获取 subview 帧

[复制链接]
菜鸟教程小白 发表于 2022-12-12 23:43:18 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在将一些代码从 XIB 更改为 Storyboard 。设置 Storyboard 场景的 subview 的帧边界的时间似乎存在很大差异。

这段代码经常使用的技术是这样的:

  • UIView subview 具有在 XIB 或 Storyboard文件中定义的尺寸(允许程序员以外的其他人修改 UI)
  • UIViewController 有一个到对象的链接,作为 IBObject UIView *
  • 在 UIViewController 的 -viewWillAppear() 中,会进行某些计算并根据这些计算完成绘制。

例如,在我们的 XIB 或 Storyboard 文件中,我们希望将 UIView 分成四个区域。 Controller 查看该 UIView 的边界,查看其框架,然后在 UIView 中绘制四个框,每个框的大小为四分之一。

在.h中:

IBOutlet UIView *outputColorKeyView;

在.m的viewWillAppear中:

CGRect keyBounds = [outputColorKeyView bounds];

float high = keyBounds.size.height;
float wide = keyBounds.size.width;

float cellWidth = wide/4.0;

XLog(@"Dimensions for the color key are: %f %f", high, wide);

我的问题是,在 XIB 下,这很好用:我能够看到我必须绘制的区域的尺寸是 200 磅宽(例如),而单元格可以绘制 50 磅宽。

在 Storyboards 下,这不再适用于我:当我从 Controller 的 viewWillAppear 方法调用时,我得到一个 (0,0,0,0) 的帧:

[18:09:16.901|4096] 颜色键的尺寸为:0.000000 0.000000

但是,从程序生命周期的后期运行(由按钮触发),我得到了正确的结果:

[18:09:35.812|4096] 颜色键的尺寸为:36.000000 734.000000

有没有办法在 View 出现之前获取这些信息?我会这么认为,但 viewWillAppear 似乎是实际呈现 View 之前的最后机会。或者是否有一些我遗漏的明显开关可以使这项技术按预期工作?

谢谢



Best Answer-推荐答案


答案在我的 followup question 中给出。 ...做这些事情的地方是在布局完成之后,在 viewDidLayoutSubviews

我不清楚为什么信息会发生变化,从最初的描述文件(无论是 XIB 还是 Storyboard)中的数据早在 viewDidLoad 就可以使用到现在的 (0,0,0 ,0),但如果您遵循书籍和网络上的大量教程代码,则需要注意这一点。

关于ios - 如何在初始化过程中及早获取 subview 帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13389750/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap