【问题标题】:flexible width for UITextField in auto layout自动布局中 UITextField 的灵活宽度
【发布时间】:2023-03-08 21:41:01
【问题描述】:

我最近在我客户的应用程序中启用了自动布局,并正在尝试更新程序以利用 iPhone 6 和 6 Plus 更大的屏幕尺寸。但是,我无法相应地调整视图宽度。

目前,我只关心前两个视图是否正确。这是它的样子:

UILabel UITextField

UILabel(称为名称)具有以下约束:
- 领先空间到 Superview:27
- Superview 的顶部空间:24

UITextField 的约束:
- 前导空格到名称:20
- Superview 的尾随空间:27
- 将 Y 中心与名称对齐

我希望这将使 UITextField 的左边缘靠近名称标签,而右边缘靠近包含 UIScrollView 的右边缘。然而,虽然左边是正确的,但 UITextField 小得可笑,以至于它最多只能占用一两个字符。

如果我向 UITextField Width >= 156 添加一个约束,则该字段对于小型 iPhone 来说足够宽,但对于较大的 iPhone 来说不够延伸。它似乎完全忽略了我放在 UITextField 上的 Trailing Space to Superview 约束。

如何让 UITextField 根据每个设备的大小调整大小?我可以不借助代码来更改宽度约束的常量吗?为什么不遵守 Trailing Space to Superview 约束?

感谢您的帮助。

【问题讨论】:

  • 您所说的约束应该有效。你确定这些真的是你所拥有的吗?您不需要任何宽度限制来使文本字段拉伸。
  • 您好,您可以添加快照吗?我可以更好地指导你。
  • 我添加了模拟器的屏幕截图、故事板场景和 UITextField 的约束。
  • 有一个红色箭头表示错误。布局系统无法满足所有约束 - 您要么有冲突的约束,要么缺少一些约束。请先尝试解决布局错误。
  • 我更新了屏幕截图,显示所有警告和错误都已更正,但问题仍然存在;这些字段仍然不遵守 iPhone 6 和 6 Plus 上的右边缘约束。任何帮助将不胜感激。

标签: ios uitextfield autolayout


【解决方案1】:

问题在于滚动视图。我用你的设置做了一个项目,可以看到你所说的非常小的文本视图。我不知道您是如何制作滚动视图的,但使用自动布局可能会很困难。所以这就是我对滚动视图和自动布局所做的。在您的视图控制器中,您希望按如下方式在滚动视图上设置约束,固定到顶部底部和两侧。这允许滚动视图占据整个屏幕,无论是什么设备。然后,不要将标签和文本视图放入滚动视图,而是拖入另一个视图。由于您的输入超出了屏幕的长度,请将您的所有输入放入这个新视图并向下扩展,以便为所有输入腾出空间。您可能需要移动视图,以便将所有内容放入其中。然后将新视图重新设置,使 x 和 y 位置都为零。

现在是最酷的部分。对滚动视图内的这个新视图进行约束。制作它们如下,顶部,底部,两侧和高度。然后将此视图置于其容器的中心。现在,在视图真正滚动之前,您需要转到大纲并找到视图底部的约束。它应该是一个负数。选择此约束并将其设置为零。

您现在可以滚动查看所有输入。

现在您可以在标签和文本视图上设置约束。为此,将标签上的约束设置为顶部查看,引导空间查看,然后固定高度和宽度。选择文本视图并将约束设置为固定到标签,固定到视图的尾部。然后你可以将它的 Y 设置为标签 Y。如果你选择两者,你可以选择水平对齐中心。

它应该如上图所示。结果将是您在帖子中想要的。继续以相同的方式向其余输入字段添加约束,所有这些都应该工作。请让我知道,如果你有任何问题。

【讨论】:

  • 完美运行。对于有这个问题的人来说,需要注意的重要一点是我们正在使用滚动视图。感谢您指出这一点。
  • 确保应用约束以使视图在滚动视图中居中。我不小心跳过了这一步。
【解决方案2】:

对 ScrollView 的约束确实很棘手,滚动视图正在适应它们的内容,这就是你得到比你想要的更小的屏幕的原因。

您需要将scrollView 内的元素之一引用到scrollView superview 或给scrollview 一个固定大小。在这种情况下,您要引用 UIViewController.view(右侧)。这样你就不需要像156>= 这样的任何约束,也不应该有任何歧义。

【讨论】:

    【解决方案3】:


        根据您的问题,您需要在滚动视图中添加自定义视图并相应地设置约束。您可以访问此链接,它将帮助您解决滚动视图上的自动布局约束问题。
    ref:http://spin.atomicobject.com/2014/03/05/uiscrollview-autolayout-ios/
    我建议你对任何需要表单的视图使用表格视图,因为它比滚动视图更合适。

    【讨论】:

      【解决方案4】:

      这是一个诡计。

      在 scrollView 之外添加一个虚拟文本字段。

      为虚拟文本字段设置约束以获得所需的正确宽度。

      然后用 dummy textField 给 textField 添加等宽约束。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-13
        • 2011-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多