记一个用Masonry及AutoLayout布局ScrollView子控件Bug

昨天朋友遇见了个关于Masonry及AutoLayout给ScrollView的子控件布局的小Bug,朋友自己解决完之后,抛给了我…

出现的Bug表现为: 
            给ScorllView的子控件(UIView)布局后, 子控件不显示.

环境:
    子控件以ScrollView的frame布局. 不设置子控件宽高.

测试:
    设置断点打印子控件frame, 发现宽高都为0.   布局改为四个约束,只设置高.
    同样不显示. 再次打印, 发现高有值, 而宽为0.

结论:
    使用Masonry或AutoLayout布局ScrollView的子控件时必须给子控件指定宽高.
    PS: Label类不在上述之内, Label类只要有内容,即可显示.

猜测原因:
    也曾猜测为在ViewDidLoad中没有拿到准确的ScrollView的frame,然后在
    viewDidAppear中手动调用了layoutIfNeeded也没有效果, 下面是猜测的
    原因:

    !!!: ScrollView的contentSize是根据子控件的大小自动计算的, 
    而contentSize即是控件的显示范围, 子控件布局可能也是参照
    contentSize的(不确定). 如果是的话, 那么可以解释为: contentSize要
    根据子控件来设置, 子控件又要根据contentSize设置.这样就造成
    上述Bug.

但是:
    我在设置子View之前 手动设置了scrollView的contentSize大小, 发现子控件
    依然不会显示.
    好奇之下,又在viewDidAppear 中设置了断点(所有工作都已经在ViewDidLoad中
    完成), 然后再次打印了子控件及ScrollView, 结果子控件的frame宽高为0, 而
    我手动设置的contentSize并没有起作用, 竟然也为0,0.. 
    这一点之前好像看到过解释, 快忘干净了, 先放在这吧....有时间再看看.

神秘代码地址,让您省去番号搜索