本文为投稿文章,作者: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