Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.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
Ios 以编程方式更改约束_Ios_Storyboard_Nslayoutconstraint - Fatal编程技术网

Ios 以编程方式更改约束

Ios 以编程方式更改约束,ios,storyboard,nslayoutconstraint,Ios,Storyboard,Nslayoutconstraint,我有一个用户表单,其中有一堆标签及其对应的文本字段或下拉列表或复选框组垂直排列在故事板上。大概是这样的: Label 1 Text Field 1 Label 2 Check Box Group Label 3 Drop Down Field Label 4 Text Field 4 [_superView addConstraint:[NSLayoutConstraint constraintWithItem:_Label3 attribute:NSLayoutAtt

我有一个用户表单,其中有一堆标签及其对应的文本字段或下拉列表或复选框组垂直排列在故事板上。大概是这样的:

Label 1
   Text Field 1
Label 2
   Check Box Group
Label 3
   Drop Down Field
Label 4
   Text Field 4
[_superView addConstraint:[NSLayoutConstraint constraintWithItem:_Label3 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:_Label2 attribute:NSLayoutAttributeBottom multiplier:1 constant:100]];
在正常情况下,标签之间设置的约束为垂直60

问题是,由于复选框组是根据从服务器检索到的数据动态填充的,所以我不知道在故事板设计时标签2和标签3之间会有多少复选框。因此,需要以编程方式更改标签2和标签3之间的约束

目前,我所做的是在它们之间设置约束60,但选中“在构建时删除”,并根据它们之间有多少复选框以编程方式设置约束。大概是这样的:

Label 1
   Text Field 1
Label 2
   Check Box Group
Label 3
   Drop Down Field
Label 4
   Text Field 4
[_superView addConstraint:[NSLayoutConstraint constraintWithItem:_Label3 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:_Label2 attribute:NSLayoutAttributeBottom multiplier:1 constant:100]];
但由于某些原因,这并没有像预期的那样起作用。虽然Label3正确地放置在最后一个复选框之后,但我只能看到Label4的一半,它具有高度约束。我试过:

[superView updateConstraints];
[superView layoutIfNeeded];

但是没有用

您可以在情节提要中添加垂直间距约束,在视图控制器中添加nslayoutconstraint IBOUTLE var,并将其连接到情节提要中的约束


现在,constraint.constant值可以通过编程更改为您想要的任何值,而不是添加它。

您可以在情节提要中添加垂直间距约束,并在视图控制器中添加nslayoutconstraint IBOUTLE var,并将其连接到情节提要中的约束


现在constraint.constant值可以通过编程更改为您想要的任何值,而不是添加它。

就我个人而言,我倾向于在“标签1”、“标签2”等之间没有任何约束。我将使用容器视图创建一个视图,该视图将包含标签之间的各种字段:

我会这样定义垂直约束(我假设您会在故事板中这样做,就像我上面所做的那样,但我展示了示例VFL,因为它是描述整个垂直约束集的简洁而精确的方式):

V:|-[label1]-[group1(0@250)]-[标签2]-[组2(0@250)]-[标签3]-[第3组(0@250)]-[标签4]-[第4组(0@250)]-|" 请注意,在我的快照中,我为那些容器“组”视图提供了非零高度和灰色背景,因此您可以看到它们,但希望这说明了这一点。具有占位符视图,将包含各种标签下的控件,并为其提供零高度但低(250)优先级(或者,像您一样,让它在运行时忽略它们)

然后,您可以通过编程方式添加所需的任何控件作为其各自组视图的子视图,并相应地设置其约束,例如

V:|-[MoView]-[LarryView]-[CurlyView]-| V:|-[MoView]-[LarryView]-[CurlyView]-| 并且,由于这些组框具有高于零高度约束的优先级,因此结果视图将相应调整大小,例如:

使用
UIStackView
(如果目标是ios9和更高版本),您可能会完成一些非常类似的事情,但如果使用简单的约束,我会这样做


这样,你就不再需要在“标签1”和“标签2”之间编码神奇的空格,例如,如果你在将来某个日期更改字体(或者更好,支持使用用户在设置应用程序中指定的字体大小),这将变得无效。

就个人而言,我倾向于在“标签1”和“标签2”之间没有任何限制标签1、“标签2”等。我将使用容器视图创建一个视图,该视图将包含标签之间的各种字段:

我会这样定义垂直约束(我假设您会在故事板中这样做,就像我上面所做的那样,但我展示了示例VFL,因为它是描述整个垂直约束集的简洁而精确的方式):

V:|-[label1]-[group1(0@250)]-[标签2]-[组2(0@250)]-[标签3]-[第3组(0@250)]-[标签4]-[第4组(0@250)]-|" 请注意,在我的快照中,我为那些容器“组”视图提供了非零高度和灰色背景,因此您可以看到它们,但希望这说明了这一点。具有占位符视图,将包含各种标签下的控件,并为其提供零高度但低(250)优先级(或者,像您一样,让它在运行时忽略它们)

然后,您可以通过编程方式添加所需的任何控件作为其各自组视图的子视图,并相应地设置其约束,例如

V:|-[MoView]-[LarryView]-[CurlyView]-| V:|-[MoView]-[LarryView]-[CurlyView]-| 并且,由于这些组框具有高于零高度约束的优先级,因此结果视图将相应调整大小,例如:

使用
UIStackView
(如果目标是ios9和更高版本),您可能会完成一些非常类似的事情,但如果使用简单的约束,我会这样做


这样,您就不再需要在“标签1”和“标签2”之间编码神奇的空格,例如,如果您在将来某个日期更改字体(或者更好,支持使用设置应用程序中指定的用户提供的字体大小),这些空格将变为无效.

谢谢..我已经尝试过这种方法,但仍然没有解决问题,即label4不知何故被遮挡了。我想我需要提到一个事实,所有这些标签和文本字段都在滚动视图中。我可能还需要更新滚动视图的内容大小吗?是的,如果您想一次查看所有内容,应该这样做开始。或者你应该可以向下滚动查看剩余的内容。谢谢。我已经尝试过这种方法,但仍然没有解决问题,即label4在某种程度上是模糊的。我想我需要提到一个事实,所有这些标签和文本字段都在滚动视图中。可能我还需要更新滚动视图的内容大小?是的,如果你想一次看到所有的内容,应该这样做。或者你应该能够向下滚动查看剩余的内容。嗨,Rob,谢谢你的建议和图形解释!它工作得很好,现在我开始