自动布局TextField。中心,顶部

问题描述 投票:0回答:1

我试着理解自动布局。我有一个文本字段,有3个约束条件:-对齐中心X到。对齐中心X到: Superview-顶部空间到: Superview 50-宽度等于: Superview 50- 宽度等于: 150我有一个警告: 相同的约束条件可能会导致剪切

如果我改成--宽度大于或等于150,就会有警告。宽度和水平位置不明确

我很困惑。事实上,这些约束条件对一个按钮或一个标签都很好用,为什么对一个TextField不一样?- 如何定位一个TextField的水平中心,顶部50,宽度150?

(似乎我必须添加一个前导和尾部的大于或等于。这似乎与宽度大于或等于150是多余的。这可以使警告不响,但这似乎是一个太复杂和多余的解决方案。是这样吗?)

enter image description here

swift macos autolayout
1个回答
1
投票

这是因为 UILabelUIButton 根据其内容调整其大小。在这种情况下,你需要指定一个合适的宽度,或者你可以给出一个带有所需padding的前导和尾部锚。

下面是在这种特殊情况下如何解决你的约束问题。给予文本字段以下约束。

  1. 50点从顶部开始。
  2. 从超级视图中的前导,带padding。
  3. 来自超级视图的尾部锚,有填充物。

最后两个锚可以用这两个约束条件来代替。

  1. 文字区域的宽度限制
  2. 对超级视图进行水平居中。

下面是在故事板上如何实现的。

Constraint


0
投票

我刚刚在Xcode 11. 2:

  • Xcode 11.2.1
  • Xcode 11.4.1

警告 显示 但在11.2.1上却没有 显示在11.4.1

在我看来,尽管这是一个 有效 警告,这是一个愚蠢的,似乎已经在版本更新中删除。

如果你想要一个 标签 要有150的宽度。当然 你知道如果文本太长的话会被剪掉。对于单行标签来说,这一点是没有办法解决的,除非你允许它扩展到窗口的边界之外。

同样,这是一个有效的警告,但这可能正是你想要的。

如果您想要一个 文本输入栏 的宽度为150,当你输入的内容太多,文字就会滚动。

那么,为什么在文本字段上有警告呢?我也不知道。这个 可能 可以认为是一个错误。

可以 通过给你的 Width: 150 约束a Priority: 250. 仅仅是单一的快速测试,显示即使输入过多的文字,字段宽度也会保持在150。但是... 我不愿意依赖这个假设,如果字段宽度的前、后等与任何其他UI元素有关,我不会指望它不会导致其他布局问题。

我想说(仅是我的观点)这是一个IB警告,可以忽略。

© www.soinside.com 2019 - 2024. All rights reserved.