问题:
遇到了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中不会。
网友评论