根据动态UILabel AutoResize ContainerView的宽度

时间:2016-04-10 04:07:56

标签: ios swift uiviewcontroller autoresize uicontainerview

我有3个水平放置子弹点的标签。我想给出定制设计的要点,所以我认为我应该将它们用作UIImage。让我来说明一下:

o PHP  o Swift  o Java

每个标签与其指定的子弹点之间将有固定的距离。标签与下一个标签的子弹点也有固定的距离(例如PHP - Swift的子弹点)。

最后,我想将它水平居中于视图。

如果我有标签的静态文本,则上述方案可行。但是,我想使用动态文本。

我认为解决方案是创建3个容器视图。所以我会:

View

   ContainerView1   ContainerView2   ContainerView3
   |------------|  |--------------| |--------------|
   |   o PHP    |  |    o Swift   | |    o C       |
   |------------|  |--------------| |--------------|

但它不会因动态/更改文字大小而保持一致。我将使用sizeToFit使文本适合,但容器视图创建了新的单独的ViewController,所以我不确定我是否可以创建容器视图'宽度自动调整为'子弹点+动态标签的宽度'

Parent ContainerView (or UIView?)
|-----------------------------|
|     CV1      CV2     CV3    |
|   |-----| |-------| |---|   |
|   |o PHP| |o Swift| |o C|   |
|   |-----| |-------| |---|   |
|-----------------------------|   

此方案仅在我可以自动操作容器视图的宽度时才有效。关于子弹点+标签的宽度。因此,我可以为每个容器制作固定边距并将它们水平居中(可能使用父容器)。

实现这一目标的方法是什么?有没有办法在Storyboard上或以编程方式执行此操作?

1 个答案:

答案 0 :(得分:1)

如果您的所有CV视图的宽度都超过了autolayout可以确定的宽度,那么父容器视图将自动调整宽度以适应内部的内容(您说您将使用sizetofit)。然后,它们必须在第一个和第一个之间具有固定的垂直空间,并且最后也必须具有到父容器的边距(前导和尾随)。父容器不能具有约束宽度(例如固定宽度约束),因为它必须根据内部内容调整大小,如果这样做会导致约束冲突,它将无法工作。 如果您不对父视图容器使用autolayout,或者您有宽度约束,则可以使用

获取容器的大小
let size = parentViewContainer. systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)

并将其设置为框架或宽度约束。

Here是一个示范项目。