UIStackView之一问一答

语言: CN / TW / HK

theme: juejin highlight: xcode


“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第2篇文章,点击查看活动详情

前言

此篇文章作为在使用UIStackView前的一些答疑,既是扫盲篇,也是实用篇,以下会讲述一些实用的案例,目的就是让更多的人拥抱UIStackView。同时欢迎小伙伴通过评论区讲讲使用StackView遇到的问题。

答疑

排列视图间距大小不一

问:排列视图间距大小不一,可以用UIStackView吗?\ 答:当然可以用,UIStackView虽然有space属性,但是适用于所有的排列视图,如果想要指定某个排列视图之间的间距,有以下两种方法: - 使用 - (void)setCustomSpacing:(CGFloat)spacing afterView:(UIView *)arrangedSubview API_AVAILABLE(ios(11.0),tvos(11.0));方法,不过这个方法有版本的限制。 - 使用一个UIView进行填充;即在需要间隙的位置插入一个空的view,并设置好其宽度或高度来充当两个排列视图的间距。

截屏2022-09-07 22.49.43.png

排列视图对齐位置不一致

问:排列视图的对齐位置不一致,如何使用UIStackView?\ 答:我们可以选择一种合适的对齐方式保证适用于绝大多数排列视图,剩下的视图使用UIView进行封装,然后在View中进行约束布局。

截屏2022-09-07 23.08.00.png

排列视图大小不一致

问:排列视图的大小不一致,可以用UIStackView吗?\ 答:可以的,UIStackView中的排列视图不需要设置位置,至于尺寸大小可以根据自身需要设置。(设置方式AutoLayout

灵活多变的UI设计

问:多变的UI设计适合使用UIStackView吗?\ 答:再合适不过了,为什么这么说呢,虽然通过AutoLayout可以自适应,来解决灵活多变的UI布局,但是这会有繁琐的代码来控制。而通过使用UIStackView,我们仅添加一次排列视图,而后可以通过控制排列视图的显示或隐藏(hidden)就能使UIStackView重新布局。

列表可用?

问:UIStackView可以用于列表布局吗?\ 答:可以,使用UIStackView可以快捷的布局简单列表,相比较UITableView较为简单,使用UITableView往往需要设置代理,实现代理等。\ 具体做法:一般采用UIScrollView + UIStackView,ScrollView控制滚动,StackView管理内容。 2022-09-08 18-47-16.2022-09-08 18_48_45.gif

拉伸、压缩

问:听说UIStackView可以自适应排列视图,那么排列视图如果有拉伸或者压缩的需求可以使用UIStackView吗?\ 答:可以,UIStackView会优先根据抗拉伸优先级Content Hugging Priority(优先级越高,越不容易被拉伸)、抗压缩优先级Content Compression Resistance Priority(优先级越高,越不容易被压缩)去约束排列视图,并不会和StackView布局相冲突。

The end

总而言之,如果你怕麻烦,那就快来使用UIStackView,把麻烦事都交给它。

如果有比较难以理解或者初学者不懂的问题,稍后也会在这整理。

如果你还没有使用过UIStackView的可以查看我的上篇文章「使用UIStackView来简化iOS的界面布局」。