如何在ios中以编程方式添加水平间距和垂直间距?

时间:2014-12-27 14:52:11

标签: ios objective-c iphone

我在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]];

上面的代码工作正常。但我想在标签之间设置水平和垂直间距。

3 个答案:

答案 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.希望这可以解决您的问题。