【问题标题】:How do I adjust UILabel width according to text width?如何根据文本宽度调整 UILabel 宽度?
【发布时间】:2025-11-21 02:10:01
【问题描述】:

我正在制作一个待办事项列表应用程序。在其中一个 TableViewController 中,我有一个 stackview(宽度为 374)包含两个标签:"name""*"。它结合为"Name*"。但是,我在 Xcode 中看到警告说“"*" 的宽度和水平位置不明确”和“"name" 的宽度不明确”。 另外,我可以看到这两个标签之间有一条红线,标签"*" 之后有很大的差距。我想我可以通过根据文本调整标签宽度来解决它,以便stackview也更小。

是否可以在 Xcode 中调整 UIlabel 的宽度。我尝试了很多方法,但都没有奏效。

【问题讨论】:

  • “调整”如何?这里的目标是什么?为什么首先有两个标签?堆栈视图有什么用?描述所需的布局。
  • 您好,感谢您的指出。我稍微编辑了问题。我这里有一个 tableview 控制器。在其中一个单元格中,我使用堆栈视图将两个标签组合在一起:“名称”和必填字段指示符“”。但是,“”的标签宽度会一直延伸到stackview的右边缘,留下很多空白空间。希望很清楚:/ @matt
  • 好吧,我再问一次,如果你想让它们在一起,为什么不只有一个标签说Name * 而没有堆栈视图?或者如果目标是在左端有Name,在右端有*,你为什么不只使用两个单独的标签,而不是堆栈视图?在我看来,堆栈视图只是把你搞砸了。
  • 所以我试图设计一个 todo 应用程序并遵循一个 github 示例。我认为示例设计很好,所以我试着看看我是否能够重做类似的东西。根据我的理解,拥有 stackview 会使标签组织得更好?

标签: swift xcode


【解决方案1】:

我有一个stackview(宽度为374)包含两个标签:“name”和“*”

那是你的问题。您有一个固定宽度的堆栈视图。我假设您使用默认的分发属性(即fill)。这会产生歧义,因为此分布值将尝试为每个排列的子视图(即您的两个标签中的每一个)提供其内在内容的宽度(即文本的宽度;您真正想要的)。但是您还将堆栈视图设置为固定宽度(374)。所以,它不知道要“拉伸”什么标签来填充空间(即内容拥抱优先级)。

所以,您是说要调整堆栈视图的大小以包装标签。 您只需移除固定宽度限制 (374)

或者,为简单起见,您只能使用一个标签,并像马特所说的那样设置内容。

【讨论】:

  • 结构如下:一个大的stackview包含:1.stackview 2.内容视图3.字段标签。我对这个大堆栈视图有限制,但对包含这两个标签的小堆栈视图没有限制。这个大堆栈视图包含在另一个内容视图中,它位于单元格中。我想知道我是否应该将事情编辑得更简单:/所以你的意思是我应该删除一个宽度约束,以便我可以尝试编辑宽度?
  • 是的,去掉宽度限制。届时堆栈视图将计算出它的大小。