【问题标题】:Labels inside of horizontal stack view are of equal width?水平堆栈视图内的标签宽度相等?
【发布时间】:2018-01-03 15:14:19
【问题描述】:

我有一个包含以下属性的堆栈视图: 轴:垂直 对齐方式:填充 分布:填充

我将其他水平堆栈视图添加到具有以下属性的垂直视图: 轴:水平 对齐方式:FirstBaseline 分布:填充

每个水平堆栈视图都包含两个标签。我希望标签根据其中的文本缩小/扩展它们的宽度。每当我将它们的 numberOfLines 设置为 0 时,两个标签的宽度都相同,并且高度会增加,如果我将 numberOfLines 设置为 1,它们会根据文本扩展/缩小它们的宽度,但如果文本需要多于一行,其余的文字没有出现。非常感谢任何帮助。

【问题讨论】:

  • 将您的代码添加到问题中
  • 到底是什么问题?我不清楚最终的行为与您想要的有何不同。

标签: ios swift uilabel uistackview


【解决方案1】:

我有一个类似的问题,水平堆栈视图中有两个标签。 label1 与 numberOfLines = 1 和 label2 是多行的。 (numberOfLines = 0) 两个标签的宽度相同,即使标签 2 的文本更长!

要解决此问题,我必须为 label1 设置宽度限制(基于其当前内容),优先级 = 750(高但不是必需的)。
这样,如果标签的文本很长并且其宽度增长大于该约束,则标签宽度 = 其内容大小。
如果标签宽度小于约束,则标签宽度 = 约束。

See screen shot

【讨论】:

    【解决方案2】:

    如果您有 2 个标签,行数设置为 1,彼此相邻,试图放入 200 像素的堆栈视图,但每个标签需要 150 像素,您必须解决问题:

    哪个标签被压缩,哪个得到它的全宽?

    这取决于它们的抗压优先级。默认情况下,自动布局不会对它们进行同等压缩,您需要将它们的约束设置为具有相等的宽度。

    如果将行数设置为0UIStackView 似乎很难获得标签的布局约束。如果他们的文本长度不同,那么它似乎就失去了所有意义。在这种情况下,我建议将 2 个标签的宽度设置为相等,除非这对您不起作用。

    【讨论】:

      【解决方案3】:

      当行数为 0 时,Autolayout 仍在努力确定 StackView 内标签的宽度。我的解决方法是设置首选宽度。

      【讨论】:

        【解决方案4】:

        我遇到了类似的问题,我为两个 UILabel 设置了以下属性,它对我有用

        label1.setContentHuggingPriority(.required, for: .horizontal)
        label1.setContentCompressionResistancePriority(.required, for: .horizontal)
        
        label2.setContentHuggingPriority(.required, for: .horizontal)
        label2.setContentCompressionResistancePriority(.required, for: .horizontal)
        

        当 Priority 设置为 .required 时,它会防止任何收缩,因为应该没有更重要的了。

        【讨论】:

          猜你喜欢
          • 2019-08-24
          • 1970-01-01
          • 1970-01-01
          • 2020-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多