我在视图中有一个方形按钮网格,完全适合iPhone 5.我现在希望它在3.5英寸屏幕上看起来也不错。我正在使用自动布局,并且我已经为3.5英寸创建了新的图像,它们的高度稍微小一些,因此它们将适合屏幕(它们不再是正方形)。根据我的理解,在使用自动布局时,您不能像往常一样使用框架?相反,您应该使用约束。但是我该怎么做?
基本上我需要做的是改变按钮的y坐标和高度。
这是4英寸屏幕上屏幕的示例(底部的标签栏)。
答案 0 :(得分:3)
在VFL中代表这一点,你想要的是:
使垂直红框垂直均匀,跨越其超视图的垂直范围:
@"V:|-[subview1]-[subview2(==subview1)]-[subview3(==subview1)]-|"
@"V:|-[subview4]-[subview5(==subview4)]-[subview6(==subview4)]-|"
同样,将盒子水平均匀地放大,跨越超级视图的水平范围:
@"H:|-[subview1]-[subview4(==subview1)]-|"
@"H:|-[subview2]-[subview5(==subview2)]-|"
@"H:|-[subview3]-[subview6(==subview3)]-|"
这使得六个子视图在其超级视图中具有相同的大小和均匀间隔。这说明了自动布局的一个优点,因为我们非常明确地避免对y
或height
值的任何引用。我们只需要定义视图,兄弟姐妹和超级视图之间的关系,自动布局可以完成其余的工作。
无论您是使用上面的VFL编程还是在Interface Builder中,这种模式都适用,但希望它能说明这一概念。
或者,您可以使用UICollectionView
设计用于间隔这些控件,您可以对其进行设置,以便正确调整纵向和横向的布局。
例如,要在我的视图中添加六个图像视图,我可以将QuartzCore.framework添加到项目中(我可以用它来创建带圆角的红色图像视图背景),然后导入标题:
#import <QuartzCore/QuartzCore.h> // and
然后在viewDidLoad
:
NSMutableArray *subviews = [NSMutableArray array];
for (NSInteger i = 0; i < 6; i++)
{
UIImageView *subview = [[UIImageView alloc] init];
[subviews addObject:subview];
subview.layer.cornerRadius = 10.0;
subview.backgroundColor = [UIColor redColor];
subview.contentMode = UIViewContentModeCenter;
subview.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:subview];
}
NSDictionary *views = @{@"subview1": subviews[0],
@"subview2": subviews[1],
@"subview3": subviews[2],
@"subview4": subviews[3],
@"subview5": subviews[4],
@"subview6": subviews[5]};
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[subview1]-[subview2(==subview1)]-[subview3(==subview1)]-|" options:0 metrics:nil views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[subview4]-[subview5(==subview4)]-[subview6(==subview4)]-|" options:0 metrics:nil views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[subview1]-[subview4(==subview1)]-|" options:0 metrics:nil views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[subview2]-[subview5(==subview2)]-|" options:0 metrics:nil views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[subview3]-[subview6(==subview3)]-|" options:0 metrics:nil views:views]];
然后,如果我使用具有透明背景的PNG图像,我可以为这六个图像视图设置image
属性,让自动布局定义frame
,QuartzCore将执行漂亮的圆角,等