自动布局中UITextField的灵活宽度

时间:2015-01-28 16:23:46

标签: ios uitextfield autolayout

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

目前,我只关心让前两个观点正确无误。这是它的样子:

UILabel UITextField

UILabel(名为Name)具有以下约束:
- 领导超级视界:27
- 超级视图的最佳空间:24

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

我希望这会使UITextField的左边缘靠近Name标签,右边缘靠近包含UIScrollView的右边缘。但是,虽然左边缘是正确的,但是UITextField很小,因此它可能只需要一个或两个字符。

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

如何根据每个设备的大小调整UITextField的大小?我可以不借助代码来改变Width约束的常量吗?为什么不尊重尾随空间到超级视图的约束?

感谢您的帮助。

enter image description here

4 个答案:

答案 0 :(得分:3)

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

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

enter image description here

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

现在,您可以在标签和文本视图上设置约束。要执行此操作,请将标签上的约束设置为顶部以查看,并将前导空间设置为查看,然后设置引脚高度和宽度。选择文本视图并设置约束以固定标签,固定到视图的尾部。然后,您可以将其设置为标签Y.如果同时选择两者,则可以选择水平对齐中心。 enter image description here

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

答案 1 :(得分:1)

对ScrollViews的约束非常棘手,滚动视图正在适应他们的内容,这就是你得到一个比你想要的更小的屏幕的原因。

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

答案 2 :(得分:0)


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

答案 3 :(得分:-1)

这是一个技巧。

从scrollView中添加一个虚拟textField。

为虚拟textField设置约束以获得所需的正确宽度。

然后使用虚拟textField向textField添加相等宽度约束。

Screenshot