iOS自动布局如何按比例调整UIView的大小?

3
我正在学习Autolayout,所以我正在阅读教程,并且尝试着操作一些UIView,以便了解它们能做什么。我想知道如何在从纵向到横向的转换中使用autolayout实现像下面这张图片那样的效果?例如,如果我将黄色视图固定在视图顶部,将蓝色视图固定在黄色视图上方,将橙色视图固定在蓝色视图上方并将橙色视图固定在视图底部,它们会按比例调整大小,保持彼此之间和视图顶部和底部的20像素间距。但是,例如蓝色框无法删除到视图顶部的支撑,即使它被固定在其上方的黄色视图上,因此它会将所有内容向下推出屏幕,在横向时更明显。我知道可以将高度和宽度等量固定以实现自适应大小,但是否有任何方法按比例调整大小,保持它们之间的间距?
2个回答

2

在Interface Builder中设置约束可能会让人感到沮丧,而且Interface Builder还不能使用乘数制定约束,例如blue.height = red.height * 0.5。但是,这些都很容易通过编码来实现。

我使用Interface Builder创建和着色UIView,因此首先我想删除Interface Builder创建的所有约束。

// in UIViewController.m
[self.view removeConstraints:self.view.constraints] ;

我将使用constraintsWithVisualFormat:options:metrics:views:创建许多约束条件,因此我创建了一个指向5个UIView的指针字典,并创建了一个NSMutableArray来保存这些约束。

NSDictionary* views = NSDictionaryOfVariableBindings(black, red, yellow, blue, orange) ;
NSMutableArray* constraints = [NSMutableArray new] ;

然后我创建约束条件,用于定位UIView并指示具有相同宽度和高度的视图。

[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[black]-[yellow]-|"  options:0  metrics:nil  views:views]] ;
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[red(==black)]-[blue(==yellow)]-|"  options:0  metrics:nil  views:views]] ;
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[orange]-|"  options:0  metrics:nil  views:views]] ;
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[black]-[red(==black)]-[orange]-|"  options:0  metrics:nil  views:views]] ;
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[yellow]-[blue]-[orange]-|"  options:0  metrics:nil  views:views]] ;

最后,我使用乘数创建约束条件,并添加所有的约束条件。
[constraints addObject:[NSLayoutConstraint constraintWithItem:orange  attribute:NSLayoutAttributeHeight  relatedBy:NSLayoutRelationEqual  toItem:black  attribute:NSLayoutAttributeHeight  multiplier:0.5  constant:0]] ;
[constraints addObject:[NSLayoutConstraint constraintWithItem:yellow  attribute:NSLayoutAttributeHeight  relatedBy:NSLayoutRelationEqual  toItem:black  attribute:NSLayoutAttributeHeight  multiplier:1.5  constant:0]] ;
[constraints addObject:[NSLayoutConstraint constraintWithItem:yellow  attribute:NSLayoutAttributeWidth  relatedBy:NSLayoutRelationEqual  toItem:black  attribute:NSLayoutAttributeWidth  multiplier:1.5  constant:0]] ;
[self.view addConstraints:constraints] ;

0

您可以按照以下步骤给出比例高度或宽度约束。

1)首先根据要求给出相等的高度或宽度约束。

2)双击右侧窗格上的约束或单击约束右侧的“编辑”。

3)像这样更改乘数。如果您已经从宽度为100的视图添加了相等的宽度约束到宽度为150的视图,则输入乘数150:100。

4)您需要确保不会有任何关于此约束的警告,否则您需要更改乘数,例如100:150。

5)这是因为有时当您给出相等的宽度或高度约束时,第一个视图将是视图本身,有时第一个视图将是其他视图。这完全取决于您为其他视图设置的其余约束。

6)现在正确应用约束后,应用其他约束并进行检查。

谢谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接