[英]UIStackView - Distribute views evenly from the centre
简短回答:
ScrollView约束
Leading >= 0, Trailing >= 0, Top >= 0, Bottom >= 0
Center X and Center Y
StackView约束
Leading = 0, Trailing = 0, Top = 0, Bottom = 0
StackView width = ScrollView width (priority low :250)
StackView height = ScrollView height
答案很长
首先,你的结构很好,我们有:
UIScrollView
UIStackView (horizontal)
Subviews
所以,要达到目标,我们应该:
UIScrollView
居中 UIScrollView
的contentSize设置为等于UIStackView
的内在内容大小 这是怎么做的:
第1步:居中UIScrollView的框架
CenterY
和CenterX
约束用于使UIScrollView
的框架居中
Leading Space
> = 0, Trailling Space
> = 0, Top Space
> = 0, Bottom Spac
e> = 0用于防止UIScrollView的帧超出父视图的帧
我使用占位符内在大小来显示与UIScrollView
的contentSize相关的错误(因为我们还没有子视图所以contentSize)。
现在,我们的UIScrollView
的框架是好的,转到下一步:)
第2步:添加水平UIStackView
PS。 UIStackView框架中的任何更改,都会更改UIScrollView的contentSize
第3步:添加子视图
因为我们在UIStackView
使用Fill Distribution
,所有subviews
必须具有内在内容大小(或高度和宽度约束(不是首选))。 例如,如果我们使用Fill Equally
,只有一个subview
具有固有的内容的大小(或高度和宽度的限制(不是优选的))足够了,其他子视图大小将等于这一个。
例如:我将添加3个标签(请删除UIScrollView
的占位符内在大小)
有用 !! 不,不,还没有尝试添加第四和第五个标签:)
为什么?
要理解我们将使用两个示例计算视图的每个元素的框架:
父视图大小:200,200第一个标签内在内容大小:120,50第二个标签内在内容大小:150,50
第一个例子(只有UIStackView
的第一个标签)
UIStackView
内在内容大小= UIStackView
UIScrollView
contentSize = 120,50 UIScrollView
frame = UIScrollView
所有帧都没问题
第二个例子(带有两个标签)
UIScrollView
frame = UIScrollView
UIScrollView
contentSize = 200,50 UIStackView
内在内容大小= UIStackView
所以, UIStackView
无法正确显示两个标签(因为UIStackView
的宽度低于两个标签的宽度),而且我们没有滚动因为, UIStackView
约束宽度等于UIScrollView宽度。 当UIStackView
内在内容大小低于最大UIScrollView
框架时,它可以工作。
为了解决这个问题,我们将宽度约束的优先级更改为低于UIStackView
内在内容大小优先级值的值,并且一切正常:)
希望有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.