ios 约束(五)

iOS在纯代码中使用AutoLayout添加约束 AutoLayout约束是苹果官方给定得约束信息。对于这个约束和UIView+AutoLayout.h延展的用法类似,不过加上了延展之后,不用写VFL语言 下面先看看以autolayout实现的效果为例我们讲解一下 下面开始上代码以用户名和密码为例,来说说, UITextField * userNameTextFiled = [[UITextField all... 阅读详情

1、用格式字符串将试图对齐并灵活调整其尺寸

    通过约束规则,我们很容易就能指定视图的对齐方式:

    1、“H:|[self]”、“H:[self]|”、“V:[self]|”、“V:|[self]”这4种格式字符串分别产生左对齐、右对齐、顶部对齐及底端对齐的效果。

    2、向上述字符串中添加表示尺寸关系的谓词,即可实现拉伸至左边界、拉伸至右边界等效果:“H:|[self(>=0)]”、“H:[self(>=0)]|”、“V:|[self(>=0)]”、“V:[self(>=0)]|”。

    3、如果再添一条竖线,那么就表示在整条坐标轴方向上面拉伸,也就是令视图从左至右或从上至下跨越整个上级视图:“H:|[self(>=0)]|”或“V:|[self(>=0)]|” 。

    4、可以添加连字符,以便在拉伸本视图的时候,给它的边界与上级视图的边界之间留出一些空隙:“H:|-[self(>=0)]-|”、“V:|-[self(>=0)]-|”。

2、处理约束规则的流程

    系统要经过多个阶段的处理,才能把视图内容显示出来。引入Auto Layout机制之前,这个过程分为两个阶段,即布局阶段与渲染阶段。而Auto Layout机制则在这两个传统的阶段之前,又添加了约束阶段。

    开发者可以实现layoutSubviews方法,以便在布局阶段修改视图里各个子视图的几何特征。当iOS认定某视图的布局已经无效时,就会调用该方法,开发者可在其中手动更新子视图的排布方式。除了系统自动调用之外,开发者可以手工调用setNeedsLayout或layoutIfNeeded方法来请求重新排版。前者是比较温和的请求,iOS系统会把很多这样的请求合并起来,然后再适当的时机调用layoutSubviews方法。而后者则更为迫切,调用了它之后,系统几乎立刻就会执行layoutSubviews。

    在渲染阶段,开发者可通过实现drawRect:方法来完全控制视图UI的绘制。当系统认定视图内容已经无效时,它会调用drawRect:方法,以便对视图进行底层绘制。需要改变渲染内容的时候,开发者可以通过setNeedsDisplay及setNeedsDisplayInRect:方法请求视图重新绘制它自己,这两者都会触发drawRect:。

    有了Auto Layout机制之后,上述两个阶段前面还会多出一个约束阶段。通过实现updateConstraints方法,我们可在该阶段创建并更新Auto Layout系统所使用的约束规则。与布局阶段相似,iOS系统可以自行判定某个视图的约束规则已经无效,从而开始执行约束阶段,而另一方面,开发者也可以手动触发此过程,相关的两个方法叫做setNeedUpdateConstraints及updateConstraintsIfNeeded,其名称与行为与刚才说的那两组方法类似。

    如果复写了视图的updateConstraints方法,那么务必要在该方法返回之前调用[super updateConstraints]。待约束阶段结束之后,Auto Layout会适当计算出视图内所有子视图的几何特征。

    没完成一个阶段,系统就会进入下一阶段。也就是说,执行完约束阶段之后,系统会执行布局阶段,而执行完布局阶段,又会执行渲染阶段。

    这种阶段处理方式给我们一些意想不到的机会。在执行布局阶段的时候,系统已经在约束阶段中吧所有约束规则都计算好了,并且已经根据这些规则设定了视图的几何特征。而在布局阶段,则可以用一种与约束规则相违背的方式继续修改视图的几何特征。另外,也可以根据由约束规则所产生的几何特征来决定视图最终的样貌。由于系统在上个阶段已经把约束规则算好了,所以本阶段对视图样貌所做的修改会一直保留到下一轮约束阶段为止。请勿在布局阶段修改约束规则,否则系统又会触发相关方法来更新约束规则,从而使程序在约束阶段与布局阶段之间陷入无限循环。

    大部分情况下都用不到这些“挂钩”方法。不过在偶尔用到它们时,这些方法会展现出强大的灵活度与控制力。

3、管理约束规则

    无论约束规则是如何创建出来的,它们都属于NSLayoutConstraint类。开发者可以通过addConstraint:方法给视图逐条添加约束规则,也可以把多条规则放在数组里,并通过addConstraint:实例方法将其添加到视图里面。在日常开发中,我们经常会把很多约束规则一并保存在某个数组里。

    存放约束规则的视图自然应该是离规则所涉及的各视图最近的那个共同祖先。在其身上装配约束规则的视图必须是规则里各个视图的共同祖先。我们可以针对NSLayoutConstraint编写category,并在其中实现一个方法,用程序代码吧该规则自动装配到正确的视图上面。

    开发者可以随时添加并移除约束规则。removeConstraint:及removeConstraints:方法分别可以从给定的视图中移除一条约束规则或一组约束规则。由于这两个方法是局域NSLayoutConstraint对象来运作的,所以它的执行效果可能与开发者所想的不符。

    比方说,我们已经构建了一条居中的约束规则,并将其添加到视图里面了。如果现在又构建了一条与之等效的约束规则,然后通过removeConstraint:来移除它,那么你会发现该规则并没有从视图中删掉。这两条约束规则虽然等效,但并不是完全相同的两个对象。下列代码演示了这个问题:

    如果执行上面这两个方法调用,那么self.view实例中就会含有一开始所构建的那条约束规则,但是removeConstraint:方法却会遭到忽略。移除不归该视图所拥有的约束规则是没有效果的。

    有两种解决办法。一种是把开头添加的那条约束规则保存到局部变量里。比如可以写成下面这样:

  [self.view addConstraint:[NSLayoutConstraint constraintWithItem:_textfield attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]];
    [self.view removeConstraint:[NSLayoutConstraint constraintWithItem:_textfield attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]];

    另一种是比较已有的约束规则与待移除的约束规则,并把数值相符者从视图里删掉。

    具体采用哪种办法要看约束规则是静态的还是动态的。如果将来可能要移除某条约束规则,那么可将保存到局部变量中,以便稍后移除。

    管理约束规则时,应注意下面几点:

   NSLayoutConstraint *myConstraint = [NSLayoutConstraint constraintWithItem:_textfield attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0];
    [self.view removeConstraint:myConstraint];

    1、可以在UIView实例上面添加会移除约束规则。与之相关的几个核心方法是:addConstraint:(addConstraints:)、removeConstraint:(removeConstraints:)及constraints。constraints方法会返回包含所有约束规则的数组。

    2、约束规则的使用范围并不局限于容器视图,几乎所有视图都可以施加约束规则。(通过名为requiresConstraintBasedLayout的类方法,我们可以知道这种视图类是不是必须放在基于约束的布局系统里才能够正常运作。)

    3、如果要以编程的方式为子视图施加约束规则,那么把子视图的translatesAutoresizingMaskIntoConstraints属性关掉。

IOS开发入门之五——storyboard的使用(上) 需要iOS开发视频资料可以加我微信: 1914532832  验证信息请注明:IOS开发  上节介绍了纯代码开发,就是所有页面全部用代码来写,纯代码开发缺点就是比较慢的,而且很不直观,需要在App运行后才能看到页面效果。这节介绍重点一下IOS推荐的开发方式:storyboard,即故事板。使用storyboard开发的优点就是比较直观,页面效果以及页面的跳转关系一目了然。 一、界面简介   ... 阅读详情

相关推荐

IOS之Masonry约束的使用

IOS之Masonry约束的使用 Masonry是做约束的,类似苹果开发的约束,做屏幕的适配,有xib开发,纯代码开发,storyboard约束等其他第三方框架。 pod 加入 pod 'Masonry', '~> 1.1.0' 懒得加版本直接写 pod 'Masonry' pod install安装的时候,默认给你安装最新版本。截止我发稿的时候,2021年11月份,版本更新到1.1.0,我用软件只用最新版本。旧版本不用 需要用的地方包含一下头文件#import <Masonry/Mas

A1521315qwss的博客 1363

IOS开发使用 constraints

IOS 开发使用 constraints 确实很方便能解决 布局上的问题 初次使用会有很多疑问但是稍微指点下 发现其实还是很简单。 下面 就距离代码 如何构建 先预定一个目标: 建立一个列表 上下排列,每个列表只使用一个button 也就是若干个button 竖向排列成一排 这里只写核心代码UIStackView *stackview=[UIStackView alloc] init;UI

wokaonimama的专栏 3877

[iOS] 关于UIScrollView的自动化布局约束

在iOS 6.0之后,引入了自动化布局约束,大大减轻了开发者关于界面布局的负担。但在对UIScrollView控件进行自动化布局时,常常会出现一些约束错误,主要原因是有些开发者不太清楚UIScrollView如何通过约束来计算contentSize的属性值,本文将对其原理以及使用方法进行简要叙述。.........

分享日常工作中遇到的种种问题 1106

IOS Constraints居中布局(界面,非代码)

之前在学Constraints时候好多教程都没有讲居中对齐,甚至有一篇居然

青霜。的专栏 1万+

iOS小技能:以动画的形式更新Masonry约束、宽高比约束、约束优先级、九宫格布局

1. iOS Masonry以动画的形式更新约束 >应用场景:筛选视图的显示与隐藏的时候带上动画来提升用户体验 3. 利用dividedBy进行九宫格布局 4. Masonry约束宽高比的例子demo】

专注于计算机研发知识和资讯分享 1万+

【ios】当xib对控件约束后,用代码进行约束的修改

将约束进行strong引用,对constant进行修改,注意如果weak的话会进行提前release self.top.constant+= 100 ; self.height.constant+= 100 ; 参考: https://blog.youkuaiyun.com/u010713935/article/details/54617983?utm_source=blogkpcl10

weixin_48618536的博客 990

IOS之constraints

anyway, you can do this with auto layout. You can do it entirely in IB as of Xcode 5.1. Let's start with some views: The light green view has an aspect ratio of 4:1. The dark green view has an aspe...

weixin_30748995的博客 201

实验四 基于IDEA+SpringBoot+Maven+Thymeleaf的系统实现实验目的

通过这次实验,我学习了如何成功进行IDEA+SpringBoot+maven的系统实现,搭建好IDEA+SpringBoot+maven的系统环境,成功地安装并配置了maven的运行环境,学会了创建springboot的三种方式,并且能将之前的实验结合起来运用。pom.xml中引入thymeleaf依赖,在classpath:/templates/下新建HTML页面(可采用实验一创建的页面),新建controller进行测试,访问页面后返回success成功数据。同时掌握和thymeleaf的基本语法。

m0_73502929的博客 1379

ios 约束(一)

1、什么是约束     约束就是一系列描述iOS程序视图布局的规则。他们限定了视图之间的关系,也限定了视图的布局形式。使用约束时。我们可以说“这些视图在水平方向上必须对齐”,或是“此视图必须根据另一个视图来调整自身高度,以便与之相符”。约束向开发者提供了一套布局语言,使得可以向视图里添加约束,并以此来描述各视图的空间关系。     iOS负责通过一套约束满足系统来实现这些布局需

ChasingDreamsCoder的博客 1136

OpenEvidence DeepConsult深度分析:技术架构、临床应用与行业影响

摘要:医疗AI平台OpenEvidence通过多智能体协作系统重构临床决策流程,解决了医学信息过载难题。其DeepConsult系统严格基于同行评审文献,5-10秒内提供循证决策支持,已覆盖40%美国医生,月咨询量达850万次。该平台采用"免费工具+广告变现"模式,通过调度、检索、摘要等模块化智能体分工,实现从文献分析到临床建议的闭环处理,在USMLE测试中准确率达90%。2025年获7500万美元融资后估值突破10亿美元,成为医疗AI领域的新范式。

AllenLV的博客 2555

从安装到跑通第一个例程:Halcon 20.11深度学习版环境搭建全记录

本文详细记录了Halcon 20.11深度学习版环境搭建的全过程,从安装配置到运行第一个例程,特别针对CUDA版本冲突、算子验证和样本数据预处理等常见问题提供解决方案。通过实战案例展示PCB缺陷分类流程,帮助工程师快速掌握工业级图像处理技术,提升深度学习模型在工业质检中的应用效率。

weixin_28739079的博客 220

终极iOS调试利器:FLEX的3D透视与实时编辑功能深度解析

FLEX(Flipboard Explorer)是一款强大的iOS应用内调试和探索工具,它为开发者提供了无需连接Xcode或LLDB的实时调试能力。FLEX的核心优势在于其**3D视图透视**和**实时属性编辑**功能,让iOS界面调试变得前所未有的直观和高效。通过FLEX,开发者可以在应用运行时直接查看和修改视图层次结构,快速定位和修复UI问题。 ## 为什么选择FLEX进行iOS调试? 🚀

gitblog_00748的博客 1061

6.2 磁悬浮轴承:软件架构与实现

本文系统阐述了磁悬浮轴承控制系统的软件架构与实现方法。采用分层架构设计,包括硬件抽象层、实时控制内核、控制算法层和应用层,确保系统实时性和可靠性。重点分析了电流环、位置环等关键控制任务的调度策略,比较了不同硬件平台(DSP、ARM、FPGA)的软件实现方案。强调模块化设计、配置化管理等工程实践,并详细介绍了从算法仿真到系统联调的完整开发流程。最后指出严格的测试验证是保证系统性能的关键,需通过多阶段测试评估起浮时间、稳态精度等核心指标。

技术工作者 751

iOS 基础 - 约束布局

xib 设置 代码 设置 三方框架

LOLITA0164的博客 1万+

FlashBootloader01-基于UDS的Flash Bootloader【架构篇】

文章目录1 Flash Bootloader的依赖项2 Flash Bootloader中使用的UDS的主要功能3 Flash Bootloader更新固件3.1 初始化MCU3.2 刷写流程 1 Flash Bootloader的依赖项 通常Flash Bootloader由以下四方面组成: UDS协议 上位机「编写Bootloader Sequence」 通信驱动(如CAN ) Flash Driver 2 Flash Bootloader中使用的UDS的主要功能 1. 10 02服务 客户端

3589

Python 爬虫实战:Boss直聘 Python 岗位招聘数据爬取

本文介绍了一个Python爬虫项目,用于抓取Boss直聘平台的Python岗位招聘数据并进行可视化分析。项目采用requests库发送POST请求,通过抓包分析获取JSON接口,绕过HTML解析直接获取结构化数据。主要内容包括: 接口分析:找到关键POST接口,解析请求头和JSON参数格式 环境准备:安装requests/pandas/matplotlib/pyecharts等依赖库 核心实现: 手动获取登录Cookie 构建请求头和城市代码映射 实现分页抓取职位列表数据 项目特色在于直接解析JSON接口而

u014481728的博客 296

iOS:原生代码添加约束

Width:对视图宽度的约束 Height:对视图高度的约束 Horizontal Spacing:对视图间水平距离的约束 Vertical Spacing:对视图间垂直距离的约束 Leading Space to Superview:与父视图左边界的约束 Trailing Space to Superview:与父视图右边界的约束 Top Space to Superview:与父视图上边界的约束 Bottom Space to Superview:与父视图下边界的约束 Widths Equally:视图

韩博主 1710

一文学会VOS2009对接网关指定走某个落地网关

介绍:  在我们日常使用VOS2009/3000的过程中,肯定会有很多落地网关与对接网关,并且某些时候还需要某些对接网关指定去走某个落地网关或者某些落地网关,从而实现比较精准的控制对接网关与落地网关的关系,下面就演示下在VOS2009/3000中如何配置某个对接网关指定走某个或者多个落地网关。 实现步骤:  VOS2009可以通过添加固定前缀的方式来指定对接网关走某个落地网关。 比如:  r1对接网关在被叫改写规则里面填写*:a*  r2对接网关在被叫改写规则里填写*:b* 1.登录VOS客户端 2.进入

非著名运维的博客 1961

IOS之NSLayoutConstraint布局约束详解

IOS 布局约束 小白的福音 NSLayoutConstraint

watertekhqx的博客 3476

基于MATLAB的最大重叠离散小波变换(MODWT)算法详解

最大重叠离散小波变换(Maximal Overlap Discrete Wavelet Transform, MODWT)是DWT的重要改进形式,由Percival和Walden等人在20世纪90年代系统提出并完善。MODWT通过消除下采样操作,采用样本平移不变的分解方式,解决了DWT的多个固有缺陷。MODWT的核心创新在于取消下采样环节。与DWT每级分解后对滤波输出进行二分下采样不同,MODWT在每一级都使用相同的滤波器,但通过插入零值的方式调整滤波器系数,保持每级系数数量与原始信号相同。

qq_42212808的博客 115

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ios 约束(二)

1、约束系统的运作规律     可以认为约束系统所用的数学算是非常严格,实际上它们只是个参考。iOS会找到对符合约束的一种布局方案,有的时候,这种方案不止一套。下面给出约束系统的一些基本特征:     1、约束规则描述的是关系,而不一定是视图在某个方向上的属性。未必非要在知道右边界的情况下才能算出左边界。     2、每条约束规则都有其优先级。优先级的取值范围是从0到10

ChasingDreamsCoder的博客 890

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

iOS之UIScrollview添加约束图文详解

转:http://www.jianshu.com/p/e4a12061776d 文/codingZero(简书作者) 原文链接:http://www.jianshu.com/p/e4a12061776d 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。 前言 在iOS开发中,autolayout是一个很强大的东西,用好了,能让你事半功倍,用不好,各种

smilebigdear的专栏 3982

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

iOS - XIB之AutoLayout添加约束

XIB——AutoLayout添加约束 仿QQ登录界面: 说明:以下各图背景红色只是方便看清楚; 1.创建工程:创建xib文件 2.打开xib文件: (1).创建头像: 拖控件:uiimageview——》放到任意位置——》点击Align键,Pin键;如下图: 此时:就可以对控件任意约束了: 说明:由于时间原因,没介绍的以后慢慢自己琢磨; Align键:Horizontally: 垂直居中对齐

gongyuhonglou的博客 2514

iOS AutoLayout Xcode约束教程

Today we will look into iOS AutoLayout in Xcode. We’ll implement and use AutoLayout and Constraint in our storyboards. These components are vital in keeping the storyboards designs consistent across s...

从零开始的教程世界 913

iOS Auto Layout原理与约束系统深度解析(10)

在iOS开发早期,开发者主要使用`frame`属性进行视图布局,这种方式在多设备适配场景下存在诸多弊端。随着iPhone屏幕尺寸增多、iPad设备引入,基于`frame`的布局方式难以适应动态变化的屏幕环境。为此,苹果在iOS 6引入Auto Layout,通过约束系统实现视图间关系的声明式布局,解决多设备适配难题。

Android开发领域创作者 1881

ios 自动布局添加删除约束

虽然现在都用Masonry布局,但还是记录一下,以备不时之需。 NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:playBtn // 要添加约束的view attribute:NSLayoutAttributeWidth // 要添加的约束属性 relatedBy:NSLayoutRelationEqu...

u011248221的博客 3636
上一篇: ios 约束(四)
下一篇: ios 约束(六)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值