Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可变宽度标签列的iOS自动布局 目标_Ios_Uilabel_Autolayout_Nslayoutconstraint - Fatal编程技术网

可变宽度标签列的iOS自动布局 目标

可变宽度标签列的iOS自动布局 目标,ios,uilabel,autolayout,nslayoutconstraint,Ios,Uilabel,Autolayout,Nslayoutconstraint,我试图通过自动布局约束实现以下设计: 我试过的 中间的标签很简单(水平居中查看) 左边和右边的标签不是那么简单。简单地添加20的前导和尾随空间约束并不适用于所有内容。此外,下面的详细信息标签可以更宽 我考虑过给右标签和左标签以>=20的前导和尾随空间限制,并使文本居中 问题 如何在以下情况下实现3个标签的动态内容列布局: 确保它们之间至少有20磅的填充物 确保左侧和右侧标签的插入超过20分,以获得较小的内容 您可以将大百分比标签和相应的细节标签包装到包装器视图中,并使包装器视图的大小与其内容

我试图通过自动布局约束实现以下设计:

我试过的 中间的标签很简单(水平居中查看)

左边和右边的标签不是那么简单。简单地添加20的前导和尾随空间约束并不适用于所有内容。此外,下面的详细信息标签可以更宽

我考虑过给右标签和左标签以>=20的前导和尾随空间限制,并使文本居中

问题 如何在以下情况下实现3个标签的动态内容列布局:

  • 确保它们之间至少有20磅的填充物
  • 确保左侧和右侧标签的插入超过20分,以获得较小的内容

您可以将大百分比标签和相应的细节标签包装到包装器视图中,并使包装器视图的大小与其内容相符,然后只需将这三个包装器视图与20px填充物排成一行即可

        -.-.-.-.           -.-.-.           -.-.-.-.
- (20) -| 100% | - (20) -  |100%| - (20) -  | 100% | - (20) -  
        |detail|           | d  |           |detail|
        -.-.-.-.           -.-.-.           -.-.-.-.

这只是解决方案之一,简单明了。

有几种方法可以解决这个问题

  • 您可以为标签指定一个固定的宽度,并将文本居中对齐(这在interface builder中比其他解决方案更容易做到)。如果您使每个标签大小相等,并将边缘相互固定,这将为您提供所需的内容。您不需要任何间距,除非您的内容可能会填满标签-在这种情况下,第二种解决方案更好
  • 另一个选项是将每个标签的中心固定到superview的中心,但使用乘数-因此对于左标签,乘数为0.5,中心为1.0,右标签为1.5。目前,您只能在代码中执行此操作,但新版本的Xcode正在开发中

  • 有一个在中创建等间距视图的示例。该方法是在需要间隔的视图(以及边上)之间创建不可见的“间隔”视图,并使用“自动布局”设置间隔宽度。垫片的宽度(或垂直间隔视图的高度)设置为相等。从PG:

    按比例缩放空间视图
    1.创建可见视图。
    2.创建与可见视图数量加上一个相等的间隔视图。
    3.交替放置视图,从间隔视图开始。
    要分隔两个可见视图,请按以下模式放置所有视图,从屏幕左侧开始向右移动:
    spacer1 |视图1 | spacer2 |视图2 | spacer3.

    4.约束间隔视图,使其长度彼此相等。
    5.创建从第一个间隔视图到容器视图的前导约束。
    6.创建从最后一个间隔视图到容器视图的尾部约束。
    7.在间隔视图和可见视图之间创建约束


    我通过为分隔标签的约束创建出口解决了这个问题(在我的例子中,边距是固定的)

    我做到了:

    let constant = (constraint1to2.constant + constraint2to3.constant)/2
    constraint1to2.constant = constant
    constraint2to3.constant = constant
    

    谢谢你的推荐。我仍在加快自动布局的速度。我试试这个。为了清楚起见,第二个解决方案是什么?我没有想到乘数。我可以看看。第二个解决方案是乘数。我将重新表述答案。有道理。不过,我希望避免使用包装器视图。试着学习如何用正确的方法去做。是的,我完全同意,所以我建议只有当一个人想不出更好的方法或者需要更快的方法时才使用我的解决方案。