iOS 开发之 AutoLayout 自动布局

2023-11-18

iOS 开发之 AutoLayout 自动布局

frame 原点自身的尺寸 来确定自身的位置

autoLayout 根据参照视图的位置来定义自己的位置

autoLayout 约束视图和视图的关系来分配屏幕上的位置

 

// 使用VFLVisual Format Language视觉格式语言)通过添加字符串来约束视图和视图之间的关系

使用 autoLayout,必须把 translatesAutoresizingMaskIntoConstraints禁用才可以使用


相对布局是找一个参照物 拿参照物当做基础,设置他和参照物的相对距离来设置自己的位置

 

VFL 需有横竖两个方向的约束 H:横向  V:竖向  |表示他的父视图  -50-表示两个视图的间距

 

 

H:横向

| 表示他的父视图

-50- 表示后面视图与前面视图的距离(后面视图是textField,前面视图是他的父视图)

[textField(>=200)] 要约束视图的宽  (>=200)允许最小的宽度是200 如果是竖向 就是允许最小的高度

@"H:|-50-[textField(>=200)]-50-|"

距离坐边原点距离50  右边边界距离50   允许视图的最小宽度是200

 

 

V: 竖向

使用autoLayout适配的时候,以最小尺寸设备为基准

VFL  横向竖向布局

@"H:" 设置横向布局

@"V:" 设置竖向布局

设置横向布局 距离参照视图的左侧边距

@"H:|-20-"

@"H:[view]-20-"

@"H:|-20-[view(200)]" view的宽  永远是200

@"H:|-20-[view(otherView)]" view的宽 otherView的宽相同

@"H:|-20-[view(>=200)]" 设置横向布局距离参照视图的左侧边距设置view横向的尺寸不能低于200

@"H:|-20-[view(>=200)]-20-|" 设置横向布局距离参照视图的左侧边距 设置view横向的尺寸 不能低于200 设置右侧与参照视图之间的间距


视图使用属性的时候绑定 key 需要绑定它真实的名字  _titleLable

self.titleLable = _titleLable



一个视图

- (void)demo1
{
    UIView *view = [[UIView alloc]init];
//    如果使用 autoLayout 下面这个属性必须禁用
    view.translatesAutoresizingMaskIntoConstraints = NO;
    view.backgroundColor = [UIColor grayColor];
    [self.view addSubview:view];
    
//    VFL 横向 竖向 布局
//    横向  @"H:" 设置横向布局
//    @"H:|-20-" 设置横向布局 距离父视图的左侧边距
//    @"H:|-20-[view(>=200)]" 设置横向布局 距离父视图的左侧边距 设置view 横向的尺寸,不能低于200
//    @"H:|-20-[view(>=200)]-20|" 设置横向布局 距离父视图的左侧边距 设置view 横向的尺寸,不能低于200,设置右侧与父视图之间的间距
    
//    竖向布局
//    @"V:|-40-[view(>400)]-20-|"
    
//    使用VFL 需把视图的对象(视图)与他的名字(字符串)绑定起来
    
    NSDictionary *views = NSDictionaryOfVariableBindings(view);
    
//    给self.view 和view 添加约束
//    addConstraint 添加约束
//    NSLayoutConstraint 具体添加约束的一个类
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[view(>=200)]-20-|" options:0 metrics:nil views:views]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-40-[view(>=200)]-20-|" options:0 metrics:nil views:views]];
    

//    Format: VFL
//    options : 同意按照某个反向去布局
//    metrics 绑定的参数
//    views 绑定视图的参数
    
}



两个视图的相对布局

// 两个视图
- (void)demo2
{
    UIView *view = [[UIView alloc]init];
//    如果使用 autoLayout 下面这个属性必须禁用
    view.translatesAutoresizingMaskIntoConstraints = NO;
    view.backgroundColor = [UIColor grayColor];
    [self.view addSubview:view];
    
    
    
    UIView *view1 = [[UIView alloc]init];
    //    如果使用 autoLayout 下面这个属性必须禁用
    view1.translatesAutoresizingMaskIntoConstraints = NO;
    view1.backgroundColor = [UIColor redColor];
    [self.view addSubview:view1];
    
    
    NSDictionary *views = NSDictionaryOfVariableBindings(view,view1);
    
//    红色 view 的约束
//    @"H:|-20-[view(>=200)]-20-|"
//    @"V:|-40-[view(50)]-10-[view1]"
    
    
//    黄色 view1 的约束
//    @"H:|-20-[view1(>=200)]-20-|"
//    @"V:[view]-10-[view1(50)]"
    
    
//    红色 view 横向的约束
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[view(>=200)]-20-|" options:0 metrics:nil views:views ] ];
//    红色 view 竖向的约束
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-40-[view(50)]-10-[view1]" options:0 metrics:nil views:views]];
    
    
//    黄色视图的横向约束1
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[view1(>=200)]-20-|" options:0 metrics:nil views:views ] ];

//    黄色视图的竖向约束
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[view]-10-[view1(50)]" options:0 metrics:nil views:views ] ];
    
    
}


优化 demo2

- (void)demo3
{
    NSArray *colorList = @[[UIColor redColor],[UIColor yellowColor]];
    for (int i = 0; i<2; i++)
    {
        UIView *view = [[UIView alloc]init];
        view.translatesAutoresizingMaskIntoConstraints = NO;
        view.backgroundColor = colorList[i];
        view.tag = 10+i;
        [self.view addSubview:view];
        
    }
    
    UIView *redView = [self.view viewWithTag:10];
    UIView *yellowView = [self.view viewWithTag:11];
    
    
    NSDictionary *views = NSDictionaryOfVariableBindings(redView,yellowView);
    
   
    
//    两个视图横向的 约束
    NSArray *constraints = @[@"H:|-20-[redView(>=200)]-20-|",@"H:|-20-[yellowView(>=200)]-20-|"];
    for (NSString *VFL in constraints)
    {
       [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:VFL options:0 metrics:nil views:views ] ];
    }
    
    
//   红色 view 黄色 view 两个视图的高度都是50
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-40-[redView(50)]-10-[yellowView(redView)]" options:0 metrics:nil views:views ]];
    
}



三个视图的相对布局

- (void)demo5
{
    NSArray *colorList = @[[UIColor redColor],[UIColor yellowColor],[UIColor blueColor]];
    for (int i = 0; i<3; i++)
    {
        UIView *view = [[UIView alloc]init];
        view.translatesAutoresizingMaskIntoConstraints = NO;
        view.backgroundColor = colorList[i];
        view.tag = 10+i;
        [self.view addSubview:view];
    }
    
    UIView *redView = [self.view viewWithTag:10];
    UIView *yellowView = [self.view viewWithTag:11];
    UIView *blueView = [self.view viewWithTag:12];
    
    
    NSDictionary *views = NSDictionaryOfVariableBindings(redView,yellowView,blueView);

//    @"H:|-20-[redView(>=200)]-20-|"
//    @"H:|-20-[yellowView(>=100)]-10-[blueView(yellowView)]-20-|"
    
//    横向 约束关系 数组
    NSArray *HList = @[@"H:|-20-[redView(>=200)]-20-|", @"H:|-20-[yellowView(>=100)]-10-[blueView(yellowView)]-20-|"];
    
//    竖向  红色视图与蓝色视图  红色视图与黄色视图   约束关系 数组
    NSArray *VList = @[@"V:|-40-[redView(50)]-10-[yellowView(redView)]",@"V:|-40-[redView(50)]-10-[blueView(redView)]"];
    
    
    for (int i = 0; i<VList.count ; i++)
    {
        
       [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:HList[i] options:0 metrics:nil views:views ] ];
       [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:VList[i] options:0 metrics:nil views:views ] ];
        
    }
    
}



效果图






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 开发之 AutoLayout 自动布局 的相关文章

  • CC Parallax 节点视差比(说明)

    我觉得问这个问题很愚蠢 但我在任何地方都找不到明确的答案 或者根本找不到答案 所以我觉得我必须问 有没有人可以清楚地解释 CCParallaxNode 的 parallaxRatio 是如何工作的 我检查了CCParallaxNode的来源
  • 跨平台 IAP

    我已在 iOS 和 Android 中集成了应用内购买 自动续订订阅 两者都工作正常 我对使用跨平台验证 IAP 有一定的疑问 例如 当多个用户登录一个应用程序时 某一特定应用程序的订阅如何运作 例如 如果用户 A 有标准套餐并且从应用程序
  • 如何设置 NSAttributedString 的字体大小

    编辑 这已被标记为重复 但正如我在下面所述 我正在寻找一个 Swift 解决方案 我发现的所有内容都是用 Objective C 编写的 我正在尝试将 HTML 转换为 NSAttributedString 但不知道如何设置字体样式和大小
  • 使 UITableView 中的动态更新内容可供 VoiceOver 访问

    我正在努力让我的应用程序更易于访问 到目前为止 标签和提示等标准可访问性正在创造奇迹 然而 我在动态更新 UITableView 中显示的内容时遇到了问题 表的每一行大约每秒更新一次 但如果我尝试在此时创建每个单元格的accessibili
  • 还有比这更好的方法在通知附件中使用 Assets.xcassets 中的图像吗?

    我想将 Assets xcassets 中的图像附加到通知中 我已经寻找解决方案大约一个小时了 这似乎是执行此操作的唯一方法 func createLocalUrl forImageNamed name String gt URL let
  • Xcode 8.3 / Xcode 9.0 刷新配置文件设备

    我添加了一些新设备 当 Xcode 8 自动管理签名资产时 如何刷新配置文件 我发现了这个问题 刷新 Xcode 7 管理的团队配置文件中的设备 https stackoverflow com questions 32729193 refr
  • AVPlayer Swift:如何隐藏控件并禁用横向视图?

    因为这是我的第一篇文章 所以简单介绍一下我 通常我设计东西 主要是 UI 但我真的很想跨入编程领域 以便更好地理解你们 所以我决定构建一个小应用程序来开始 所以我已经花了几个小时试图解决这个问题 这是我的第一个应用程序项目 所以我为我的新手
  • UICollectionView 快速粘性标题

    我正在尝试创建一个粘性补充标题 它始终保持在顶部并且不会响应滚动事件 到目前为止 我发现的解决方案仍然对弹跳滚动做出反应 并使用自定义 flowLayout 进行修复 这也可能是我的问题的修复 我想要这种方式的原因是标头在其他地方使用并且应
  • Sierra 更新后无法针对 iOS 10 进行编译

    我有一个今年八月生成的证书和配置文件 它们在 Apple 开发者门户中均有效 未过期 当我打开以 8 3 为目标的项目时 出现以下错误 No certificate matching iPhone Developer My Name ABC
  • iOS 7 MapKit 崩溃:[VKRasterOverlayTileSource invalidateRect:level:] 中的 EXC_BAD_ACCESS

    我仅在 iOS 7 上遇到无法重现的崩溃 我大量使用 MKOverlayRenderer 在地图上绘制形状 iOS 6 上不会发生此崩溃 任何与此相关的想法都会有用 Exception Type EXC BAD ACCESS Code KE
  • 所有 UI 前面的透明 UIImageView

    首次启动我的应用程序后 我想向用户展示一些教程 以解释我的应用程序的功能 所以我需要设置一个带有一些箭头和标签的透明 UIImageView 其中主 UI 更具体地说 tabbarcontroler 中的 navigationviewcon
  • 从方案加载 url 第一次未处理 - appdelegate 与 viewcontroller

    我的应用程序已成功打开并将参数 从 URL 方案 即 myApp sometextToPrint 设置为AppDelegate类 但每当我想处理它们时 当从该 URL 打开应用程序时 它就会在第一次失败 我在前台检查器中有一个应用程序 它调
  • 如何通过 swift 包管理器在 swift 项目中添加 Alamofire [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在探索 SPM 现在我需要知道如何在我的项目中通过 SPM 导入 Alamofire 创建一个名为的 swift 文件Package在你
  • SwiftUI 查看所有视图,包括工作表视图

    我需要根据某些条件在所有视图之上显示一个视图 无论顶视图是什么 我正在尝试以下代码 struct TestView
  • 应用程序图标上的快捷方式项目不适用于 iOS 13

    为了支持应用程序图标上的快捷方式项目 我们在中实现了以下方法SceneDelegate func windowScene windowScene UIWindowScene performActionFor shortcutItem UIA
  • 如何模拟应用程序在后台被杀死?

    我试图验证我的应用程序 App1 在启动另一个应用程序 App2 后被系统关闭时行为是否正确 有什么方法可以模拟或强制这种行为吗 在 App2 运行时告诉模拟器模拟内存警告不会执行任何操作 直到 App1 返回前台为止 从调试器中杀死 Ap
  • NSPredicate predicateWithFormat 传入属性名称

    关于 NSPredicate 的简单问题 我正在尝试使用 传入 值构建我的谓词 如下所示 NSPredicate currentPredicate NSPredicate predicateWithFormat key changesDic
  • 如何查看iOS11屏幕录制是否开启?

    为了检测 iOS11 屏幕录制功能的开或关 我使用了 isCaptured 和 UIScreenCapturedDidChange 通知 当我第一次启动应用程序并在 iOS11 内置屏幕录制功能上时 它会通知选择器方法 值为 True 但是
  • 将粗体应用于 NSAttributedString 的一部分,同时保留字体大小和外观

    我正在为 iOS 开发一个富文本编辑器 使用UITextView连同一个NSAttributedString 它的功能与传统功能类似 即选择一个区域 单击一个按钮 并将该效果应用于该区域 同时保留文本上的任何其他属性 不幸的是NSAttri
  • 无效的 Swift 支持 - 文件位置不正确

    我一直在尝试将新版本上传到 iTunes Connect 来更新应用程序 我第一次使用 xCode 6 但收到了一封来自 Apple 的电子邮件 内容如下 亲爱的开发者 我们发现您最近交付的 应用程序 存在一个或多个问题 要处理您的交货 必

随机推荐

  • Redis使用总结(四、处理延时任务)

    引言 在开发中 往往会遇到一些关于延时任务的需求 例如 生成订单30分钟未支付 则自动取消 生成订单60秒后 给用户发短信 对上述的任务 我们给一个专业的名字来形容 那就是延时任务 那么这里就会产生一个问题 这个延时任务和定时任务的区别究竟
  • 简单讲解一下什么是ATT&CK框架

    点击 仙网攻城狮 关注我们哦 不当想研发的渗透人不是好运维 让我们每天进步一点点 简介 ATT CK框架由 MITRE 安全组织提出并列出了APT 高级可持续威胁攻击 的14个阶段涉及到206个安全技术点上千种攻击 检测手段 基本覆盖所有网
  • Mip-Nerf三维重建代码复现教程——环境配置

    Mip Nerf三维重建Pytorch使用Pycharm运行0基础教程 项目论文 项目Github 你好 这里是 出门吃三碗饭 本人 本文章接下来将介绍如何从0运行2020会议Mip Nerf的Pytorch版本 让你自己动手渲染第一个三维
  • 网络安全应急响应----1、应急响应简介

    目录 1 应急响应流程 2 PDCERT应急响应方法模型 3 应急响应常见事件 4 应急响应分析流程 网络安全应急响应 针对已经发生的或可能发生的安全事件进行监控 分析 协调 处理 保护资产安全 1 应急响应流程 2 PDCERT应急响应方
  • uni-App聊天功能的源码

    前言 泡泡IM uniapp版聊天源码是一套完整的基于uniapp开发的聊天软件源码 可编译成微信小程序 安卓 IOS APP聊天软件 H5网页聊天室 uniapp聊天源码未加密 无外部依赖 可私有化部署 可二次开发 文档全面 接口丰富 方
  • 仿kafka实现java版时间轮

    系统定时 超时 在我们平时的项目开发中 会设置系统的超时时间 比如在http接口中设置超时时间 在定时调度中也会用到 在jdk的开发的实现Timer和ScheduledThreadPoolExecutor DelayQueue定时调度中使用
  • React学习之扩展浅比较(三十四)

    注意 这玩意也已经被React PureComponent的功能取代了 这里依旧是提一下 主要是React v15的版本中的react with addons js 这些玩意还存在 哎 害人呐 引入 import shallowCompar
  • c#图像保存为icon

    Icon操作类 实现了将Image图像向Icon的转化 调用示例 Image pic Image FromFile D tmp 2 png IconTool SaveToIcon pic D tmp test2 ico class Icon
  • 5.x Linux RT-Preempt补丁和ARM平台RT-test编译

    1 在make menuconfig中 5 x版本内核的RT Preempt设置在General Setup下面 2 ARM平台的RT test编译 git clone git git kernel org pub scm utils rt
  • springboot 集成elasticsearch遇到的坑

    最近开始学习elasticsearch 所以就想着在springboot里面集成一下elasticsearch 结果遇到了不少麻烦 下面总结一下 但愿大家和自己以后都少走弯路 首先声明下 本人开始学习elasticsearch的时候 官网最
  • python-类变量(类属性),实例变量(实例属性),self作用

    类中定义的变量又称之为属性 类中定义的函数又称之为方法 类中 所有函数 方法 之外 此范围定义的变量 称为类属性或类变量 类中 所有函数 方法 内部 以 self 变量名 的方式定义的变量 称为实例属性或实例变量 类中 所有函数 方法 内部
  • nuxt3 pinia pinia-plugin-persistedstate

    安装pinia yarn add pinia pinia nuxt 或者使用 npm npm install pinia pinia nut 安装pinia plugin persistedstate npm npm i pinia plu
  • x-studio(Lua调试器,粒子编辑器,UI编辑器,代码编辑器,csb恢复工具)

    最新版本 x studio 10 0 9000 29 2020年4月14日更新 官网 https x studio net 官方教程 https docs x studio net x studio是一款强大的游戏开发IDE 由作者历时5年
  • 如何从零开始写小程序

    看了这篇文章 即使让我现在就从头写一个能够正常运行的小程序 也没有原本想象中的那么难了 在本文中 我们将会以一个具体的小程序为例 带领大家从零到一完成一个小程序的开发流程 并将这个小程序上传到 FinClip com 进行小程序提审与上架操
  • 信息收集之 绕过CDN获取真实IP地址

    作者主页 士别三日wyx 作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 专栏简介 此文章已录入专栏 网络安全快速入门 CDN绕过 一 为什么要绕过CDN 二 如何识别CDN 1 nslookup解析
  • 多线程总结

  • Android 5.0 API新增和改进

    API 级别 21 Android 5 0 LOLLIPOP 为用户和应用开发者提供了新的功能 本文档介绍了最值得注意的新 API 有关新平台功能的扼要介绍 另请参阅 Android Lollipop 集锦 开始开发 要构建 Android
  • 硬件设计---了解电源篇

    1 概述 在高速电路设计中一块单板上常存在多种电源 3 3V 1 8V 1 2V 1 0V 0 9V 0 75V等 有时光是对FPGA供电就需要五六种电源 为了便于使用往往用户只需要提供一种或几种电源 然后经过板上电源模块转换到各个目标电源
  • 二、Docker安装及使用教程(Windows版)

    Docker安装及使用教程 Windows版 1 下载安装 2 启用windows Hyper V虚拟引擎 1 打开设置 2 搜索 启用或关闭 windows 功能 3 勾选Hyper V服务 4 根据提示重启电脑 等待更新即可 2 启动D
  • iOS 开发之 AutoLayout 自动布局

    iOS 开发之 AutoLayout 自动布局 frame 原点自身的尺寸 来确定自身的位置 autoLayout 根据参照视图的位置来定义自己的位置 autoLayout 约束视图和视图的关系来分配屏幕上的位置 使用VFL Visual