Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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
Swift 自动布局文本字段。中间,顶部_Swift_Macos_Autolayout - Fatal编程技术网

Swift 自动布局文本字段。中间,顶部

Swift 自动布局文本字段。中间,顶部,swift,macos,autolayout,Swift,Macos,Autolayout,我试图理解自动布局。我有一个包含3个约束的文本字段: -将中心X与:Superview对齐 -顶部空间至:Superview 50 -宽度等于:150 我有一个警告:相等的约束可能会导致剪切 如果我换成 -宽度大于或等于150 我有一个警告:宽度和水平位置不明确 我很困惑。事实上,这些约束对于按钮或标签很有效。 -为什么文本字段不同? -如何定位文本字段的水平中心、顶部50和宽度150 (似乎我必须添加一个大于或等于的前导和尾随。对于大于或等于150的宽度,这似乎是多余的。这可以使警告静音,但这

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

如果我换成 -宽度大于或等于150 我有一个警告:宽度和水平位置不明确

我很困惑。事实上,这些约束对于按钮或标签很有效。 -为什么文本字段不同?
-如何定位文本字段的水平中心、顶部50和宽度150

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


这是因为
UILabel
UIButton
根据其内容调整其大小。在这种情况下,您需要指定一个适当的宽度,或者您可以提供一个带有所需填充的前导和尾随锚点

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

  • 从最高点算起50分
  • 使用填充从超级视图开始引导
  • 带填充的超级视图中的尾部锚点
  • 最后两个锚点可以替换为以下两个约束:

  • 文本字段的宽度约束
  • 水平居中至超级视图
  • 以下是如何在故事板上实现这一点:


    我刚刚检查了一下:

    • 代码11.2.1
    • 代码11.4.1
    警告在11.2.1中显示,但在11.4.1中不显示

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

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

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

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

    那么,为什么要在文本字段上显示警告?不知道。这可能被认为是一个bug

    您可以通过为
    宽度:150
    约束设置
    优先级:250
    来消除该警告。单次快速测试表明,即使输入太多文本,字段宽度仍将保持在150。但是我不愿意依赖这种假设,如果字段宽度/前导/尾随等与任何其他UI元素相关,我不会指望它不会导致其他布局问题


    我想说(仅限于我的意见)这是一个可以安全忽略的IB警告。

    UILabel会根据其内容自动调整大小。文本字段是否可编辑?请仔细检查您的约束。。。甚至可能删除它们并重新执行。红线表明出了问题。正如您所描述的,我只是尝试了一下,但没有得到警告(Xcode 11.4.1):我认为标签和按钮“可以”根据其内容调整大小。但是,如果我有一个宽度大于或等于150的按钮,我没有警告,就像我在这里有一个TextFieldOk一样,如果我放置一个宽度、一个前导和一个尾随大于或等于,我可以使警告静音。它工作,但我仍然不明白为什么我需要领先和落后。这似乎是多余的,太复杂了?把三个都给是多余的。如果您提供的是前导和尾随锚点,则不需要
    宽度。也许我应该忽略那些毫无意义的黄色警告?不,你不应该忽略它们。当您运行的设备具有不同的屏幕大小时,它们将导致意外行为。在给出前导锚和尾随锚之后,你得到了什么警告?