本文為投稿文章,作者:qianbin(Github)
Demo:
AutoLinearLayoutView的實現完全基於Auto-Layout,並且支持iOS7以上的系統。
可以在Interface Builder中直接修改屬性,便於在Xib/Storyboard中快速構建界面:
和UIStackView相比,它多了Insets屬性,少了Distribution和Baseline Relative屬性。Insets屬性對於UIStackView來說基本無解(額外的約束會沖突)。而Distribution和Baseline Relative屬性對AutoLinearLayoutView來說,可以輕松的添加額外的約束來實現。
AutoLinearLayoutView充分考慮了內部隱含約束的優先級:
通常,任何添加到其中的View都不會被拉伸,除非將View的Content Hugging Priority設置得足夠小(50,相當於Fill屬性)。這對開發者更友好,在添加多個View的時候不容易沖突。
通常,任何添加到其中的View如果太大,都會將AutoLinearLayoutView撐大,或者自我擠壓,或者擠壓Sibling,這取決於View的Content Compression Resistance Priority。如果Compression Resistance Priority足夠大(950),將會突破Spacing和Insets的約束。
不管子View有沒有Intrinsic Content Size,子View的Hugging/Compression優先級都會被衡量。這在需要用UIView輔助布局的時候會很有用 ,UIStackView並沒有考慮這一點。
另外,AutoLinearLayoutView支持動態添加/移除子View。
具體實現和Demo請訪問:https://github.com/qianbin/AutoLinearLayoutView