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 行为变化?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上创建自定义循环 UIScrollView

UIScrollView 内的 UIView 未在 3,5 英寸屏幕 iOS 上调整大小

UIScrollView 在 iOS 5 中自动滚动随机量

IOS - Quartzcore 自定义 UIView 带阴影

尽管没有使用Autolayout,但垂直滚动在UIScrollView和iOS7以及Xcode 5中不起作用

为啥 UIScrollView 的滚动会在 iOS 4.3 中触发 layoutSubViews 方法,而在 5.0 及以上版本中却没有?