我想学习自动布局,所以我通过阅读教程,并与一些UIViews瞎搞只是为了看看我可以让他们做。 我不知道我怎么会有所建树像下面的图片从纵向到横向与自动版式的过渡? 我想,例如,如果我压住了黄色的视图的顶部,蓝色到黄色,橙色到蓝色,橙色的底部,他们会按比例调整,保持相互之间的20个像素和顶部和视图的底部。 但蓝盒子,例如,不会让我删除它支撑到视图的顶部,即使它钉在它上面的黄色观点,所以它推都记录下来,并关闭屏幕的景观。 我知道你可以固定的高度和宽度也同样让他们调整,但有什么办法可以按比例调整大小的东西,保持它们之间的间距?
Answer 1:
它可以是令人沮丧的,使约束在界面生成器,和界面生成器还不能使约束带乘法器,如blue.height = red.height * 0.5
。 他们都容易代码来使,虽然。
我用Interface Builder来创建和颜色UIViews,所以首先我要删除Interface Builder中创建的所有约束。
// in UIViewController.m
[self.view removeConstraints:self.view.constraints] ;
我会用创造了许多限制constraintsWithVisualFormat:options:metrics:views:
,所以我创建的指针到5个UIViews的字典,并创建一个NSMutableArray持有的约束。
NSDictionary* views = NSDictionaryOfVariableBindings(black, red, yellow, blue, orange) ;
NSMutableArray* constraints = [NSMutableArray new] ;
然后,我创建一个定位UIViews,并表明具有相同的宽度和高度的观点的约束。
[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] ;
Answer 2:
您可以通过以下步骤按比例给予高度或宽度约束。
1)首先给你想根据需要给予什么都相等的高度或宽度约束。
2)双击右侧窗格中的约束或点击约束的右侧的“编辑”。
3)改变这样的乘数。 如果已经添加了等于宽度约束从宽度100的视图到的宽度150的图,那么您输入乘法器150:100。
4)你需要确保不会有其他方式对此约束你需要改变像100的乘数任何警告:150。
5)这是因为有时当你给相等的宽度或高度约束的第一个视图将是视图本身有时第一视图将是其他视图。 这完全取决于你对其他视图设置约束的其余部分。
6)现在,当约束被正确地应用应用其它约束条件,并检查。
谢谢。
文章来源: iOS Autolayout proportionally resize UIViews?