我最近在我的客户端应用程序中启用了自动布局,并尝试更新程序以利用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约束的常量吗?为什么不尊重尾随空间到超级视图的约束?
感谢您的帮助。
答案 0 :(得分:3)
问题在于滚动视图。我用你的设置创建了一个项目,可以看到你所说的非常小的文本视图。我不知道你是如何制作滚动视图的,但是使用自动布局,它们可能很难。这就是我对滚动视图和自动布局的处理方式。在视图控制器中,您需要在滚动视图上设置约束,如下所示,固定到顶部底部和两侧。无论使用何种设备,这都允许滚动视图占据整个屏幕。然后,不要将标签和文本视图放入滚动视图,而是在另一个视图中拖动。由于您的输入超出了屏幕的长度,因此请将所有输入放入此新视图并向下延伸,以便为所有输入腾出空间。您可能需要移动视图以便将所有内容放入。然后将新视图设置回来,使x和y位置都为零。
现在为酷的部分。对滚动视图中的这个新视图进行约束。使它们如下,顶部,底部,两侧和高度。然后将此视图置于其容器中。现在,在视图实际滚动之前,您需要转到大纲并找到视图底部的约束。它应该是一个负数。选择此约束并将其设置为零。
您现在可以滚动查看所有输入。
现在,您可以在标签和文本视图上设置约束。要执行此操作,请将标签上的约束设置为顶部以查看,并将前导空间设置为查看,然后设置引脚高度和宽度。选择文本视图并设置约束以固定标签,固定到视图的尾部。然后,您可以将其设置为标签Y.如果同时选择两者,则可以选择水平对齐中心。
它应该如上图所示。结果将是您在帖子中所需的结果。继续以相同的方式向其余输入字段添加约束,并且所有约束都有效。请让我知道,如果你有任何问题。
答案 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添加相等宽度约束。