iOS 5 中的 UIScrollView layoutSubviews 行为变化?
Posted
技术标签:
【中文标题】iOS 5 中的 UIScrollView layoutSubviews 行为变化?【英文标题】:UIScrollView layoutSubviews behavior changes in iOS 5? 【发布时间】:2011-11-07 12:24:19 【问题描述】:我正在开发一个组件,它是 UIView 的子类并包含 UIScrollView。 滚动时,我注意到不同的行为取决于我构建的 SDK。在 ios 4 上,layoutSubviews 消息在滚动视图的超级视图(这是我的组件)上发送,但在 iOS 5 上,消息似乎不再发送......
在查看了 iOS 5 发行说明和变更日志后,我没有发现任何有关此类变更的信息。我错过了什么吗?
【问题讨论】:
【参考方案1】:在 iOS5 中,layoutSubviews 不会在滚动视图的父视图上调用。但它是在 iOS4 中。
如果您希望在 iOS5 中实现此行为,请在您的 UIScrollView 子类中执行此操作:
- (void)layoutSubviews
[super layoutSubviews];
// causes layoutSubviews to get called on superview
[self.superview setNeedsLayout];
这可能已更改为更有效。仅仅因为 UIScrollView 是滚动的,并不意味着它的 superview 需要自己布局。
【讨论】:
这正是我的想法,你说得对,这完全有道理。谢谢! 呃,这不会导致“无休止的布局循环”吗?所以一旦layoutSubviews
被调用,它就会在每次运行循环迭代时被调用。
我的测试没有循环,我可以再次验证,我会挖掘我写这个答案时写的示例代码。【参考方案2】:
我在调整按钮大小时遇到了很大的问题,女巫是 tableview 中的子视图。笔尖加载了较小的按钮,加载后我调整了它的大小。但表格视图内容没有。 (在 iOS 4.* 中它是完美的,但在 iOS 5 中)。所以我发现我必须将调整大小放在 ViewDidLoad 中。我希望它对一些人有帮助1 =)
【讨论】:
以上是关于iOS 5 中的 UIScrollView layoutSubviews 行为变化?的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 内的 UIView 未在 3,5 英寸屏幕 iOS 上调整大小
IOS - Quartzcore 自定义 UIView 带阴影
尽管没有使用Autolayout,但垂直滚动在UIScrollView和iOS7以及Xcode 5中不起作用
为啥 UIScrollView 的滚动会在 iOS 4.3 中触发 layoutSubViews 方法,而在 5.0 及以上版本中却没有?