layoutSubviews 不执行的问题

问题:

遇到了layoutSubviews在调用几次后就不执行的问题

调试过程:

查找layoutSubviews的调用时机
1、init初始化不会触发layoutSubviews

2、addSubview会触发layoutSubviews

3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化

4、滚动一个UIScrollView会触发layoutSubviews

5、旋转Screen会触发layoutSubviews

6、改变自身大小或者子view大小的时候也会触发layoutSubviews(改变frame不会)

7、在调用了setNeedsLayout()和layoutIfNeeded()也会触发layoutSubviews

在layoutSubviews打印日志发现,我的view在触发两次layoutSubviews后就没了。
通过不断的注释代码发现原来是在layoutSubviews中改变了自己frame,暂时没有找到根本原因。

结论:

在iOS的view层级中,遵循superview管理subview的frame的逻辑,不要瞎搞。

注意事项

1、在iOS13中,改变子视图的frame会触发控制器的viewWillLayoutSubviews事件,在iOS12中不会。

你可能感兴趣的:(layoutSubviews 不执行的问题)