我有一个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 是以编程方式在代码中创建的,但上面提到的所有其他视图都是通过情节提要创建的。
+添加图片以便于理解
在图片中, imageView1 是 UI 图片。我在故事板中创建它只是为了理解目的,但实际上它将以编程方式创建,并且必须与它下面的NSLayoutConstraint constraintsWithVisualFormat:@"V:|[textView1]"
( textView1 )的边距对齐。
这是我想通过编程方式创建它的约束(如果这是真正的问题:)。
此约束始终要确保 imageView1 和 textView1 始于同一边距。
如何以编程方式定义此约束?
答案 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];