Iphone 使用自动布局更改约束

Iphone 使用自动布局更改约束,iphone,ios,autolayout,Iphone,Ios,Autolayout,我在视图中有一个方格按钮,非常适合iPhone 5。我现在希望它在3.5英寸的屏幕上看起来也不错。我正在使用自动布局,我已经为3.5英寸的屏幕创建了一些新的图像,这些图像的高度稍微小一些,这样它们就可以放在屏幕上了(它们不再是正方形了)。据我所知,在使用自动布局时,您不能像往常一样使用框架吗?相反,您应该使用约束。但是我该怎么做呢 基本上我需要做的是改变y坐标和按钮的高度 这是4英寸屏幕(底部的选项卡栏)上屏幕外观的示例 在VFL中表示这一点,您需要的是: 使垂直红色框的大小垂直均匀,跨越其su

我在视图中有一个方格按钮,非常适合iPhone 5。我现在希望它在3.5英寸的屏幕上看起来也不错。我正在使用自动布局,我已经为3.5英寸的屏幕创建了一些新的图像,这些图像的高度稍微小一些,这样它们就可以放在屏幕上了(它们不再是正方形了)。据我所知,在使用自动布局时,您不能像往常一样使用框架吗?相反,您应该使用约束。但是我该怎么做呢

基本上我需要做的是改变y坐标和按钮的高度

这是4英寸屏幕(底部的选项卡栏)上屏幕外观的示例


在VFL中表示这一点,您需要的是:

使垂直红色框的大小垂直均匀,跨越其superview的垂直跨度:

@"V:|-[subview1]-[subview2(==subview1)]-[subview3(==subview1)]-|"
@"V:|-[subview4]-[subview5(==subview4)]-[subview6(==subview4)]-|"
同样,使长方体的大小在水平方向上均匀,并跨越其superview的水平跨度:

@"H:|-[subview1]-[subview4(==subview1)]-|"
@"H:|-[subview2]-[subview5(==subview2)]-|"
@"H:|-[subview3]-[subview6(==subview3)]-|"
这使得六个子视图在其superview中大小相等且间隔均匀。这说明了自动布局的优点之一,因为我们非常明确地避免了对
y
height
值的任何引用。我们只需要定义视图、它们的兄弟视图和它们的superview之间的关系,而auto layout会处理其余的部分

无论您是使用上面的VFL以编程方式还是在Interface Builder中,此模式都适用,但希望它能说明这个概念

或者,您可以使用
UICollectionView
,该视图设计用于隔开这些控件,您可以对其进行设置,使其正确调整纵向和横向布局


例如,要将六个图像视图添加到我的视图中,我可以将QuartzCore.framework添加到项目中(我可以使用它创建带有圆角的红色图像视图背景),然后导入标题:

#import <QuartzCore/QuartzCore.h>   // and 

然后,如果我使用具有透明背景的PNG图像,我可以为这六个图像视图设置
图像
属性,让自动布局定义
,QuartzCore将完成漂亮的圆角等

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]];