Swift - 自动布局 3 个具有动态宽度的视图



我正在使用约束,到目前为止还可以。

有一个表格视图,每行我有 3 个标签。 这 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 个标签内的文本短于主视图宽度),中间标签也将始终位于左侧标签旁边。

见下图:在前两行中,您可以看到我想要的内容,在最后一行中是发生的情况

通了!

在最左侧的标签上增加宽度解决了这个问题。

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

最新更新