【问题标题】:Auto Layout TextField. Center, top自动布局文本字段。中心,顶部
【发布时间】:2020-06-02 16:55:51
【问题描述】:

我尝试了解自动布局。我有一个带有 3 个约束的文本字段: - 将中心 X 对齐到:Superview - 顶部空间:Superview 50 宽度等于:150 我有一个警告:相等的约束可能会导致剪裁

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

我很困惑。事实上,这些约束对按钮或标签很有效。 - 为什么 TextField 会有所不同?
- 如何定位TextField的水平居中、前50、宽150?

(似乎我必须添加一个前导和尾随大于或等于。这对于大于或等于 150 的宽度似乎是多余的。这可以使警告静音,但这似乎是一个过于复杂和多余的解决方案。是对吧?)

【问题讨论】:

  • UILabel 根据其内容自动调整大小。
  • 文本字段是否可编辑?
  • 仔细检查你的约束......甚至可以删除它们并重新做它们。红线表示有问题。我刚刚按照您的描述尝试过,我确实 NOT 收到警告(Xcode 11.4.1):i.stack.imgur.com/ZUChD.png

标签: swift macos autolayout


【解决方案1】:

这是因为UILabelUIButton 根据其内容调整其大小。在这种情况下,您需要指定适当的宽度,或者您可以使用所需的填充来指定前导和尾随锚点。

以下是在这种特殊情况下解决约束问题的方法。为文本字段提供以下约束:

  1. 距离顶部 50 点。
  2. 从带有内边距的超级视图引出。
  3. 带有填充的超级视图的尾随锚点。

最后两个锚点可以用这两个约束代替:

  1. 文本字段的宽度限制。
  2. 水平居中于超级视图。

这是您在故事板上实现这一目标的方法:

【讨论】:

  • 我认为标签和按钮“可以”根据其内容调整大小。但是如果我有一个宽度大于或等于 150 的按钮,我没有警告,因为我在这里有一个 TextField
  • 好的,如果我输入宽度、前导和尾随大于或等于,我可以使警告静音。它有效,但我仍然不明白为什么我需要前导和尾随。看起来是多余的,太复杂了?
  • 给出所有 3 个是多余的。如果您提供前导和尾随锚点,则不需要 width
  • 我试过了,苹果给出了警告。也许我应该忽略那些没有意义的黄色警告?
  • 不,您不应该忽略它们。当您运行的设备具有不同的屏幕尺寸时,它们将导致意外行为。在给出前导和尾随锚点后,您的警告是什么?
【解决方案2】:

我刚刚检查了这个:

  • Xcode 11.2.1
  • Xcode 11.4.1

警告在 11.2.1 上显示,但在 11.4.1 上显示

在我看来,即使它是一个有效警告,它也是一个愚蠢的警告,并且似乎已在版本更新中被删除。

如果您希望 标签 的宽度为 150,当然您知道如果文本太长会被剪裁.对于单行标签,没有办法解决这个问题,除非您允许它扩展到窗口边界之外。

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

如果您希望文本输入字段的宽度为 150,则当您输入的内容过多而无法容纳时,文本会滚动。

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

可以通过为您的Width: 150 约束提供Priority: 250 来消除该警告。只是一个快速的测试表明,即使输入太多文本,字段宽度也将保持在 150。但是......我不想依赖这个假设,如果字段宽度/前导/尾随等与任何其他 UI 元素相关,我不会指望它不会导致其他布局问题。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2014-11-15
    • 2014-06-23
    • 1970-01-01
    • 2015-08-11
    相关资源
    最近更新 更多