使用autolayout的NSLayoutConstraint类中的constraintWithItem 、constraintsWithVisualFormat这两个类方法来创建视图并可以实现自动布...

本文介绍如何使用Auto Layout在iOS应用中实现灵活的视图布局。通过两种方式创建约束:一种是使用NSLayoutConstraint类手动创建,另一种是利用NSLayoutConstraint提供的视觉格式语言。文中详细解释了如何设置视图的位置和大小约束,确保视图能够在不同尺寸的屏幕上正确显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    [self createViewWithConstraintItem];
    [self createViewWithConstraint];
}

- (void)createViewWithConstraintItem
{
    UIView *redView = [[UIView alloc]init];
    redView.backgroundColor=[UIColor redColor];
    redView.translatesAutoresizingMaskIntoConstraints = NO;
    [self.view addSubview:redView];
    
    /**左边距50*/
    NSLayoutConstraint *viewLeftConstraint = [NSLayoutConstraint constraintWithItem:redView
                                                            attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view
                                                            attribute:NSLayoutAttributeLeading multiplier:1 constant:50.f];
    /**上边距50*/
    NSLayoutConstraint *viewTopConstraint = [NSLayoutConstraint constraintWithItem:redView
                                                    attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view
                                                            attribute:NSLayoutAttributeTop multiplier:1 constant:100.f];
    
    /*--------------------------------------------------------------------------------
     注意:通常在设置宽度高度的时候最好不要固定死,另外当viw1.attribute不等于view2.attribute*multiplier
     +constant的时候,我们则要constraintWithItem函数中的toItem设置为nil以及attribute参数设置
     为NSLayoutAttributeNotAnAttribute
     ---------------------------------------------------------------------------------*/
    /**宽度150*/
    NSLayoutConstraint *viewWidthConstaint = [NSLayoutConstraint constraintWithItem:redView
                                                            attribute:NSLayoutAttributeWidth
                                                    relatedBy:NSLayoutRelationGreaterThanOrEqual
                                                            toItem:nil
                                                        attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:150];
    /**高度150*/
    NSLayoutConstraint *viewHeightConstaint = [NSLayoutConstraint constraintWithItem:redView
                                                                attribute:NSLayoutAttributeHeight
                                                    relatedBy:NSLayoutRelationGreaterThanOrEqual
                                                                toItem:nil
                                                        attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:150];
    
    [self.view addConstraints:@[viewLeftConstraint,viewTopConstraint,viewWidthConstaint,viewHeightConstaint]];
}

- (void)createViewWithConstraint
{
    /**创建左边view*/
    UIView *leftView = [[UIView alloc]init];
    leftView.backgroundColor = [UIColor redColor];
    leftView.translatesAutoresizingMaskIntoConstraints = NO;
    [self.view addSubview:leftView];
    
    /**创建右边view*/
    UIView *rightView = [[UIView alloc]init];
    rightView.backgroundColor = [UIColor blueColor];
    rightView.translatesAutoresizingMaskIntoConstraints = NO;
    [self.view addSubview:rightView];
    
    
    /**创建右下方view*/
    UIView *rightBottomView = [[UIView alloc]init];
    rightBottomView.backgroundColor = [UIColor yellowColor];
    rightBottomView.translatesAutoresizingMaskIntoConstraints = NO;
    [self.view addSubview:rightBottomView];
    
    NSDictionary *viewDic = NSDictionaryOfVariableBindings(leftView,rightView,rightBottomView);
    
    /*距父视图左边距50以及自身宽度大于等于150*/
    NSArray *leftView_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[leftView(>=150)]" options:0 metrics:nil views:viewDic];

    /*距父视图上边距100以及自身高度大于等于150*/
     NSArray *leftView_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-100-[leftView(>=150)]" options:0 metrics:nil views:viewDic];

    /*水平方向布局,rightView 在 leftView 右侧标准距离处,并且宽度不小于 50 点。*/
    NSArray *rightView_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[leftView]-[rightView(>=50)]" options:0 metrics:nil views:viewDic];
    
    NSArray *rightView_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-100-[rightView(>=50)]" options:0 metrics:nil views:viewDic];
    
    
    
    NSArray *rightBottomView_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[leftView]-[rightBottomView(>=50)]" options:0 metrics:nil views:viewDic];
    
    /*垂直方向布局距离父视图100,另外rightBottomView 在 rightView下方也就是相当于紧贴*/
    NSArray *rightBottomView_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-100-[rightView(>=50)][rightBottomView(>=100)]" options:0 metrics:nil views:viewDic];
    
    
    [self.view addConstraints:leftView_H];
    [self.view addConstraints:leftView_V];
    
    [self.view addConstraints:rightView_H];
    [self.view addConstraints:rightView_V];
    
    [self.view addConstraints:rightBottomView_H];
    [self.view addConstraints:rightBottomView_V];
    
}

@end

转载于:https://www.cnblogs.com/thbbsky/p/4394834.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值