我在ios 8中创建了一个应用程序。我有4个垂直可用的标签(它应该改变某些条件的位置),我已经以编程方式禁用了自动布局和设置约束。现在,问题是我可以设置水平和垂直位置,宽度和高度的约束,我找不到任何方法来添加标签之间水平和垂直间距的约束。
任何人都可以帮我这样做。
到目前为止,我有以下代码:
NSArray *constraint_V_WebUrl = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[weburl(31)]" options:0 metrics:nil views:contentDictionary];
NSArray *constraint_H_WebUrl = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[weburl(196)]" options:0 metrics:nil views:contentDictionary];
NSArray *constraint_POS_H_WebUrl = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-13-[weburl]" options:0 metrics:nil views:contentDictionary];
[self.cardDetails addConstraints:constraint_POS_V_WebUrl];
[self.cardDetails addConstraints:constraint_POS_H_WebUrl];
[self.cardDetails addConstraint:[NSLayoutConstraint constraintWithItem:self.weburl attribute:NSla relatedBy:NSLayoutRelationEqual toItem:self.cardDetails attribute:NSLayoutAttributeTopMargin multiplier:1 constant:0.0]];
上面的代码工作正常。但我想在标签之间设置水平和垂直间距。
答案 0 :(得分:5)
您可以使用可视格式和代码格式来定义约束。 视觉格式有许多限制,并不适用于所有情况。
在您的情况下,您可以使用(水平间距):
[NSLayoutConstraint constraintWithItem:YourViewAtLeft
attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual
toItem:YourViewAtRight attribute:NSLayoutAttributeLeft
multiplier:1.0 constant:ValueOfSpacing];
// Paste your view names and constraint value.
然后使用addCostraint
添加此约束。
答案 1 :(得分:5)
您可以使用约束将子视图放置在与另一个子视图固定距离(水平或垂直)的位置。请记住,在约束两个兄弟视图时,应该将约束添加到父视图中。
示例:假设您有2个标签label1和label2,这两个标签都是名为parentView的UIView的子项。使用label2和label1作为项创建约束,label2左侧等于label1右,乘数1和常量等于所需的水平间距。 然后将约束添加到parentView,而不是任何标签。
示例代码:
[ parentView addConstraint:[NSLayoutConstraint constraintWithItem: label2
attribute: NSLayoutAttribueLeft
relatedBy: NSLayoutRelationEqual
toItem: label1
attribute: NSLayoutAttributeRight
multiplier: 1
constant: LABEL_SPACING ] ];
答案 2 :(得分:1)
巴拉吉
我有一个类似的问题,但能够通过在标签之间的故事板中创建约束并将它们(约束)链接到IBOutlet NSLayoutConstraints来解决它。通过检查不同的屏幕大小,可以在代码中修改约束。
@property (weak, nonatomic) IBOutlet NSLayoutConstraint* verticalSpace1;
然后,在viewWillAppear ......
if (height > x) { // x would just be below the height you wanted to change it for
_verticalSpace1.constant = 20;
}
这会将我之前在故事板中设置的间距更改为8,最多为20.希望这可以解决您的问题。