以编程方式将View的前边缘与约束对齐

时间:2015-08-07 16:07:34

标签: ios objective-c autolayout nsautolayout ios-autolayout

我有一个curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub > ~/.ssh/authorized_keys(比如 imageView1 )和一个UIImageView(比如 textView1 )必须垂直显示(一个[ imageView1 ]低于其他[ textView1 ],以与 textView1 相同的边距位置开头。我必须通过编程方式自动布局来实现这一点。

我知道这可以通过为两个视图设置如下的垂直约束来完成。

UITextView

但我在这里遇到的问题是我已经有很多文本视图( textView2 textView3 )在此 textView1 之前和之后水平排列。

我已经通过情节提要向此 textView1 添加了许多自动布局限制。根据不同的屏幕尺寸和方向, textView1 边距根据故事板上提供的约束而有所不同。

现在我如何以编程方式提供自动布局约束,使我的 imageView1 垂直对齐,与 textView1 的边距相同?

p.s: imageView1 是以编程方式在代码中创建的,但上面提到的所有其他视图都是通过情节提要创建的。

  

+添加图片以便于理解

enter image description here

在图片中, imageView1 UI 图片。我在故事板中创建它只是为了理解目的,但实际上它将以编程方式创建,并且必须与它下面的NSLayoutConstraint constraintsWithVisualFormat:@"V:|[textView1]" textView1 )的边距对齐。

enter image description here

这是我想通过编程方式创建它的约束(如果这是真正的问题:)。

此约束始终要确保 imageView1 textView1 始于同一边距。

如何以编程方式定义此约束?

4 个答案:

答案 0 :(得分:2)

您可以直接实例化约束,例如

,而不是使用可视化格式
[NSLayoutConstraint
    constraintWithItem:imageView1 attribute:NSLayoutAttributeLeading
    relatedBy:NSLayoutRelationEqual
    toItem:textView1 attribute:NSLayoutAttributeLeading
    multiplier:1.0 constant:0.0]

答案 1 :(得分:0)

使用Masonry以编程方式设置约束。它非常易于使用,并为用户减少了许多复杂性。

 https://github.com/SnapKit/Masonry

答案 2 :(得分:0)

...您可以尝试构建UIView,设置所需的约束,并将其用作UIImageView的占位符。(以后您可以添加它们在这样的视图中),或者在其他方面,使用UICollectionView代替。

答案 3 :(得分:0)

您可以在中设置选项参数 constraintsWithVisualFormat:options:metrics:views:检查Apple Class Reference

您的代码可能如下

NSString* leadingConstraintsExpression = @"V:[imageView1][textView1]";

NSDictionary* viewsDictionary = NSDictionaryOfVariableBindings(imageView1,textView1);

NSArray* leadingConstraints = [NSLayoutConstraint 
                                  constraintsWithVisualFormat:leadingConstraintsExpression
                                                      options:NSLayoutFormatAlignAllLeading 
                                                      metrics:nil 
                                                        views:viewsDictionary];

[self.view addConstraints:leadingConstraints];