IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> IOS开发之约束(屏幕适配) -> 正文阅读

[移动开发]IOS开发之约束(屏幕适配)

autoresizing(不建议使用)

参考父容器来设置子控件,不能参考兄弟容器,被淘汰

  • 设置
    在这里插入图片描述

  • 小技巧:点击Preview,并双击屏幕,能显示各种设备的适配情况
    在这里插入图片描述

  • 代码实现

autoresizingMask的枚举属性,注意属性是相反的
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
    UIViewAutoresizingNone                 = 0, 
    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
    UIViewAutoresizingFlexibleWidth        = 1 << 1,
    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
    UIViewAutoresizingFlexibleHeight       = 1 << 4,
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
//同时设置多个
redView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleWidth;

Autolayout

Autolayout的两个概念是参照和约束,参照是其他兄弟控件或者父控件,约束Constraint(规则)是限制位置和大小

  • 设置Autolayout
    在这里插入图片描述
  • Constrain to margins打勾是代表有边界,一般不打勾

在这里插入图片描述

  • constant是加上的参数,multipller是倍数

在这里插入图片描述

  • 产生红色警告
    检查是否必要约束(x,y),或者约束冲突,可以点击警告进行解决

  • 产生黄色警告
    与控制器设置的位置冲突,最终以约束为主

  • 代码实现

先禁用autoresizing功能
view.translatesAutoresizingMaskIntoConstraints = NO;
    UIView *blueView = [[UIView alloc]init];
    blueView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:blueView];
   
    blueView.translatesAutoresizingMaskIntoConstraints = NO;
      
    //设置blue的高度为400
    NSLayoutConstraint *blueHC = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:400];
    //自己的约束添加在自己身上
    [blueView addConstraint:blueHC];
    
    //设置blue左边30
    NSLayoutConstraint *blueLeft = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:blueView.superview attribute:NSLayoutAttributeLeft multiplier:1 constant:30];
    //与他人属性相关添加在两者的父容器身上
    [self.view addConstraint:blueLeft];
    
    //设置blue右边30
    NSLayoutConstraint *blueRight = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:blueView.superview attribute:NSLayoutAttributeRight multiplier:1 constant:-30];
    [self.view addConstraint:blueRight];
    
    //设置blue上边30
    NSLayoutConstraint *blueTop = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:blueView.superview attribute:NSLayoutAttributeTop multiplier:1 constant:30];
    [self.view addConstraint:blueTop];
    
    参数1:对象A
    参数2:对象A的属性
    参数3:A与B的关系
    参数4:对象B
    参数5:对象B的属性
    参数6:系数(相乘)
    参数7:参数(直接加)
    没有toItem设置nil,attribute设置NSLayoutAttributeNotAnAttribute 
    注意约束加在谁身上!
  • 修改constant,可以通过拖拽的方式在controller中修改
self.viewTopConstraint.constant  += 100;
//如果需要加动画,多加一个语句
[UIView animateWithDuration:1 animations:^{
    //myView是主页面
    [self.myView layoutIfNeeded];
}];

size classes + Autolayout

size classes把屏幕进行分类,可以为不同的屏幕设置不同的约束

第三方框架Masonry

官方文档翻译——点击传送

  • 常用方法
//添加新约束
 - (NSArray *)mas_makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
//更新约束,会覆盖之前的约束
 - (NSArray *)mas_updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
//完全移除旧约束,添加新约束
 - (NSArray *)mas_remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
  • 基本属性
@property (nonatomic, strong, readonly) MASConstraint *left;
@property (nonatomic, strong, readonly) MASConstraint *top;
@property (nonatomic, strong, readonly) MASConstraint *right;
@property (nonatomic, strong, readonly) MASConstraint *bottom;

//首部
@property (nonatomic, strong, readonly) MASConstraint *leading;

//尾部
@property (nonatomic, strong, readonly) MASConstraint *trailing;
@property (nonatomic, strong, readonly) MASConstraint *width;
@property (nonatomic, strong, readonly) MASConstraint *height;
@property (nonatomic, strong, readonly) MASConstraint *centerX;
@property (nonatomic, strong, readonly) MASConstraint *centerY;

//文本基线
@property (nonatomic, strong, readonly) MASConstraint *baseline;
  • 特殊属性
//(top, left, bottom, right)
@property (nonatomic, strong, readonly) MASConstraint *edges;

//(width, height)
@property (nonatomic, strong, readonly) MASConstraint *size;

//(centerX, centerY)
@property (nonatomic, strong, readonly) MASConstraint *center;
  • 示例
    UIImage *mainImage = [UIImage imageNamed:@"background"];
    
    //主页展示
    UIImageView *mainImageView = [[UIImageView alloc]init];
    mainImageView.image = mainImage;
    mainImageView.contentMode = UIViewContentModeScaleAspectFill;
    mainImageView.clipsToBounds = YES;
    [self.view addSubview:mainImageView];

    [mainImageView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.view);
        make.right.equalTo(self.view);
        make.top.equalTo(self.view).offset(50);
        make.height.equalTo(@200);
    }];

    //AFN1
    UIImageView *AFN1 = [[UIImageView alloc]init];
    AFN1.image = mainImage;
    AFN1.contentMode = UIViewContentModeScaleAspectFill;
    AFN1.clipsToBounds = YES;
    [self.view addSubview:AFN1];
    
    [AFN1 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.view);
        make.top.equalTo(mainImageView.mas_bottom);
        make.width.equalTo(mainImageView).multipliedBy(0.5);
        make.height.equalTo(@80);
    }];
    self.AFN1 = AFN1;
  • 注意事项
    使用Masonry不需要设置控件的translatesAutoresizingMaskIntoConstraints属性为NOmas_makeConstraintsmas_updateConstraints以及mas_remakeConstraints内部已经帮我们设置了;
  • 安全区
// 顶部安全区高度.
#define  JM_HeightStatusBar     [UIApplication sharedApplication].statusBarFrame.size.height

// 底部安全区高度.
#define JM_HeightBottomSafeArea \
({float height = 0;\
if (@available(iOS 11.0, *)) {\
height = [[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom;\
}\
(height);})
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:41:26  更:2021-08-24 15:42:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:02:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码