为了账号安全,请及时绑定邮箱和手机立即绑定

什么时候调用布局子视图?

什么时候调用布局子视图?

iOS
月关宝盒 2019-07-22 12:12:47
什么时候调用布局子视图?我有一个定制的视图layoutSubview动画期间的消息。我有一个充满屏幕的视图。它在屏幕底部有一个自定义子视图,如果我更改导航条的高度,它将在InterfaceBuilder中正确调整大小。layoutSubviews在创建视图时调用,但不会再次调用。我的子视图布局正确。如果我关闭调用状态栏,则子视图的layoutSubviews则根本不调用,即使主视图确实对其大小进行了动画化。在什么情况下layoutSubviews真的打电话了?我有过autoresizesSubviews设为NO我的定制视图。在InterfaceBuilder中,我有顶部和底部的支柱和垂直箭头集。这个难题的另一个部分是,必须将窗口设置为键:[window makeKeyAndVisible];否则,子视图不会自动调整大小。
查看完整描述

3 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

在@BadPirate之前的回答的基础上,我做了进一步的实验,并提出了一些澄清/更正。我发现layoutSubviews:只有在下列情况下,才会在视图上调用:

  • 它自己的

    (不是框架)改变了。
  • 它的一个直接子视图的界限发生了变化。
  • 子视图将添加到视图中或从视图中删除。

一些相关细节:

  • 只有在新值不同的情况下,才会认为边界是更改的,

    包括一个不同的起源

    ..请特别注意,这就是为什么

    layoutSubviews:

    每当UIScrollView滚动时调用,因为它通过更改边界的来源来执行滚动。
  • 更改框架只会在大小更改时更改边界,因为这是传播到边界属性的唯一内容。
  • 视图层次结构中尚未出现的视图边界上的更改将导致调用

    layoutSubviews: 当视图最终被添加到视图层次结构时.

  • 为了完整起见:这些触发器不会

    直接

    调用layoutSubview,而是调用

    setNeedsLayout

    ,它设置/升起一个旗子。对于所有视图,运行循环的每一次迭代

    在视图层次结构中

    ,这个标志被选中。对于每个发现升起国旗的视图,

    layoutSubviews:

    被调用并重置标志。将首先检查/调用层次结构上较高的视图。



查看完整回答
反对 回复 2019-07-23
?
largeQ

TA贡献2039条经验 获得超7个赞

我跟踪解决方案的原因是InterfaceBuilder坚持不能在打开模拟屏幕元素(状态栏等)的视图上更改Spring。由于弹簧为主视图关闭,该视图无法更改大小,因此,当调用栏出现时,整个视图都会向下滚动。

关闭模拟的功能,然后调整视图大小和正确设置弹簧会导致动画发生,并调用我的方法。

调试中的另一个问题是,当调用状态通过菜单切换时,模拟器退出应用程序。退出app=没有调试器。


查看完整回答
反对 回复 2019-07-23
  • 3 回答
  • 0 关注
  • 289 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信