Swift - 具有动态宽度的Autolayout 3视图

时间:2016-03-10 15:48:01

标签: ios swift autolayout

我正在使用约束,直到现在还可以。

我有一个tableview,每行有3个标签。这三个标签的内容是动态的,所以我需要这些标签的宽度也是动态的。 问题是,如果需要以最大字体大小显示左标签和中间标签的完整内容,我希望最右边的标签缩小。

正确的标签设置为adjustsFontSizeToFitWidth = true 所以如果需要缩小字体,其他标签有固定的字体大小。 这是我到目前为止所拥有的 -

MainView.addConstraint(NSLayoutConstraint(item: leftlabel,
                                          attribute: .Left,
                                          relatedBy: .Equal,
                                          toItem: MainView,
                                          attribute: .Left,
                                          multiplier: 1,
                                          constant: 15))
MainView.addConstraint(NSLayoutConstraint(item: midlabel,
                                          attribute: .Left,
                                          relatedBy: .Equal,
                                          toItem: leftlabel,
                                          attribute: .Right,
                                          multiplier: 1,
                                          constant: 15))
MainView.addConstraint(NSLayoutConstraint(item: rightlabel,
                                          attribute: .Left,
                                          relatedBy: .Equal,
                                          toItem: midlabel,
                                          attribute: .Right,
                                          multiplier: 1,
                                          constant: 15))
MainView.addConstraint(NSLayoutConstraint(item: rightlabel,
                                          attribute: .Right,
                                          relatedBy: .Equal,
                                          toItem: MainView,
                                          attribute: .Right,
                                          multiplier: 1,
                                          constant: 15))

实际发生的是最左边的标签宽度正在缩小,我无法看到其中的整个文字,而是看到一些文字和几个字母后的3个点。

我想要的另一件事是,即使有"白色空间"中间标签也将始终位于左侧标签的旁边。 (例如,如果3个标签内的文字短于主视图宽度)。

见下图: In the first two rows you can see what I want, and in the last row is what happens

1 个答案:

答案 0 :(得分:0)

想出来了!

向最左边的标签添加宽度解决了这个问题。

因为我从一开始就不知道标签的宽度,所以我使用leftlabel.intrinsicContentSize()来获取宽度,并添加了另一个具有此宽度的约束。