【发布时间】:2014-08-29 06:01:15
【问题描述】:
当更改 UIView 的某些属性时,它会在 superview 中触发 layoutSubviews。我在文档中找不到任何关于此的陈述。
这些属性在superview和self中触发布局
- 框架
- 界限
这些属性仅在超级视图中触发布局
- 变换
- layer.transform
这些属性仅在自身中触发布局
- 无
这些属性不会触发任何布局
- 居中
- layer.anchorPoint
- 层.位置
- 阿尔法
我发现 transform 会触发布局而 position 和 anchorPoint 不会,这很令人困惑。
示例代码:https://github.com/hfossli/LayoutSubviewsInconsistency
我想知道:
- 为什么我会看到这种行为
- 如果这确实是不一致,或者我误解了一些核心概念
- 每次我更改转换时如何避免将 superview 转换为 layoutSubviews
我在文档和头文件中找不到任何关于此的内容。使用 UIDynamics 或类似工具时,问题很严重。
【问题讨论】:
-
UIScrollView的滚动也会触发重新布局它的所有子视图。您可以覆盖[UIScrollView layoutSubviews]在大多数子类中什么都不做。 -
是的,当滚动视图滚动时,它会在视图上更改
bounds,这样会触发layoutSubviews。 -
UIScrollView 为其 layoutSubviews 实现中的所有子视图调用 setNeedsLayout
-
不,我不这么认为:gist.github.com/hfossli/f8c4947d3475615cd10fd6da954e4823 此外,它超出了这个问题的范围。我更想知道为什么 super 和 self 被称为 IMO过度。
标签: ios uiview layoutsubviews viewdidlayoutsubviews