自动布局不垂直添加间隙

Posted

技术标签:

【中文标题】自动布局不垂直添加间隙【英文标题】:Autolayout not adding gap vertically 【发布时间】:2017-09-02 18:30:52 【问题描述】:

我是一个以编程方式解决自动布局的新手。

我定义了一个图像视图,添加到超级视图(UIViewController)。添加了使用视觉格式设置 gap 的约束。我没有提供价值只是破折号 (-) 。根据我所指的学习资源,如果不提供价值,我将获得 8 分的差距。

我在水平方向上得到间隙,但在垂直方向上没有。

- (void)viewDidLoad 
    [super viewDidLoad];
UIImageView * thumbnailImageView = [[UIImageView alloc] init];
thumbnailImageView.backgroundColor = [UIColor greenColor];
thumbnailImageView.image = [UIImage imageNamed:@"thumbnailImage"];
thumbnailImageView.contentMode = UIViewContentModeScaleAspectFill;
thumbnailImageView.layer.masksToBounds = true;
thumbnailImageView.translatesAutoresizingMaskIntoConstraints = false;

[self.view addSubview:thumbnailImageView];

[self.view addConstraints:[NSLayoutConstraint
                      constraintsWithVisualFormat:@"V:|-[thumbnailImageView]-|" options:0
                      metrics:nil
                      views:NSDictionaryOfVariableBindings(thumbnailImageView)]];
[self.view addConstraints:[NSLayoutConstraint
                           constraintsWithVisualFormat:@"H:|-[thumbnailImageView]-|" options:0
                           metrics:nil
                           views:NSDictionaryOfVariableBindings(thumbnailImageView)]];

【问题讨论】:

【参考方案1】:

如果您希望始终使用边距,则需要设置:self.view.preservesSuperviewLayoutMargins = YES;

或者,您也可以更改边距:

self.view.layoutMargins = UIEdgeInsetsMake(8, 8, 8, 8);
self.view.preservesSuperviewLayoutMargins = YES;

否则视图将相应地扩大或缩小以适应。当您添加上述代码行时,您会注意到它默认为您添加了 8 个像素到所有约束。但是,水平约束现在可能看起来更大或看起来像 16。这是因为边距可以是 8、16 或 20。

明确指定您的尺寸总是更好。

【讨论】:

感谢您的帮助

以上是关于自动布局不垂直添加间隙的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 不能使用情节提要垂直滚动(使用自动布局)?

自动布局约束不起作用

在水平和垂直的recyclerview中膨胀布局,具有recycler视图的FlexboxLayout添加视图水平自动垂直

自动布局水平和垂直格式一起

如何在 iOS7 中使用自动布局让按钮垂直增长?

在水平堆栈视图(自动布局)中将文本与图像垂直居中 - iOS