ios 约束(三)

iOS自动布局高级用法及纯手码约束写法 立即下载

创建约束规则

    通过NSLayoutConstraint类,开发者可以用两种方式来创建约束规则。可以用一个相当长的方法调用语句来指明视图的某个属性与其他属性之间的关系,并描述这些属性之间的联系,也可以用一种写起来非常短小的格式化语言来指定视图在水平方向与垂直方向上的排布形式。

    记住:无论怎么样构建约束规则,他们所产生的结果都是类似“y关系mx + b”这样的关系式。不论创建了何种约束规则,他们都是NSLayoutConstraint类的成员。

 1、基本约束规则声明

    NSLayoutConstraint类的constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:方法一次能够创建一条约束规则。这些规则可以把一个视图同另一个视图关联起来。

    这个方法会创建出严格的”view.attribute R view.attribute * multiplier + constant“关系式。其中R可以是”等于(==)、大于等于(>=)、小于等于(<=)“。

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

    这段代码会向视图控制器的视图里添加一条新的约束规则,它会把文本框中心点的横坐标与本视图中心点的横坐标对齐。具体来说,就是在两个视图中心点的横坐标之间设立等同关系。放大倍数是1,偏移量是0.这就产生了上面的关系式。

    这个关系式的意思是:请把本视图中心点的X坐标与文本框中心点的X坐标对齐。UIView的addConstraint:方法会把这条约束规则添加到视图之中,该规则与其他的约束规则都会存放在视图的constraints属性里。

2、用可视化格式字符串声明约束规则

    NSLayoutConstraint类里还有个方法,可以根据字符串来创建约束规则,这种字符串使用基于文本的视觉格式语言来表示其内容。这就好比给OC语言高手设计的一套ASCII看下面例子:

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[leftLabel]-25-[rightLabel]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(leftLabel,rightLabel)]];

    上面的这行代码会根据可视化格式字符串的内容创建出一套约束规则,以满足其中的关系。它们用来表述视图的横轴(H)与纵轴(V)方向上与其他视图的关系。本例所用的这个字符串的意思就是说:确保rightLabel出现来leftLabel下方15点处。

    创建这种格式字符串的时候要注意下面这些事项:

    1、先用H:或V:前缀来指明规则所针对的轴。

    2、字符串里指代视图的变量名都用方括号括起来。

    3、两控件之间的固定间距用左右带“-”的常量来表示,例如-15-。

    4、本例没有使用选项(options参数),不过开发者可以借此来指定对齐的方向是从左至右、从右至左还是从头至尾。

    5、本例也没有使用metrics参数,开发者可以把一份字典穿进去,并在其中提供一些约束规则所用到的常量,这样就不用再去专门创建相关的格式字符串了。比方说,我们想令两个文本标签之间的间距可变,那么请将本例中的15替换成某个指标的名字,然后把该指标的值放在metrics字典里面。字典的键是指标的名称,而值的类型则是NSNumber。传入这样一个字典比每次用到一种宽度时都去创建新的NSString实例要简单许多。

    6、views:参数的实际意义与其名称不同,他不是个包含视图的数组。我们要给该参数传入含有变量绑定的字典。这种字典会把作为变量名的字符串与变量所指代的视图关联起来。执行了这样一种操作之后,开发者就可以在格式字符串里使用诸如leftLabel及rightLabel等有意义的符号了。

    用格式字符串来构建约束规则时,总会产生一个包含若干约束规则的数组。某些格式字符串相当复杂,另外一些则比较简单。我们不太容易看出来每个字符串到底会产生多少约束规则。请注意:constraintsWithVisualFormat方法会制作出能够满足格式字符串的一系列约束规则,而开发者要把这些规则全都添加到视图里面去。

3、变量绑定

    Auto Layout系统在处理可视化的约束字符串时,需要把leftLabel及rightLabel等视图名称与它们所表示的实际视图对应起来。这是就需要用到变量绑定了,我们通过NSLayoutConstraint.h文件里定义的宏来执行变量绑定,该文件是UIKit中的一个头文件。

    NSDictionaryOfVariableBindings()宏以任意数量的局部变量作为参数。正如大家在早前的范例汇总所看到的,这些参数最后不需要添加上nil。该宏会根据传入的变量构建一份字典,其中每个条目的键都是变量名,而值则是变量本身。比方说,如果执行下面这条语句:

NSDictionaryOfVariableBindings(leftLabel,rightLabel)

    如果你不想使用这个宏,那么不妨手工制作一份字典,并把它传给使用可视化格式字符串的约束规则构建器。

OPTI Toolbox v2.28 安装与 3 个求解器补全:SCIP、SeDuMi、MOSEK 配置详解 本文详细介绍了OPTI Toolbox v2.28在MATLAB环境下的完整安装指南,包括SCIP、SeDuMi和MOSEK三个关键求解器的配置与优化技巧。通过分步指导和实战案例,帮助用户高效搭建强大的优化工具包,提升混合整数规划、二次约束二次规划等复杂问题的求解效率。 阅读详情

相关推荐

西电计组实验二 运算器实验

算术逻辑运算实验 一.实验目的   1.了解简单运算器的数据传输通路。   2.验证运算功能发生器的组合功能。   3.掌握算术逻辑运算加、减、与的工作原理。   4.验证实验台运算的8位加、减、与、直通功能。   5.按给定数据,完成几种指定的算术和逻辑运算。 二.实验原理   算术逻辑单元ALU的数据通路如图2-1所示。其中运算器ALU181根据74LS181的功能用VHDL硬件描述语言编辑而成,构成8位字长的ALU。参加运算的两个8位数据分别为A[7…0]和B[7…0],运算模式由S[3…0]的16种

Polaris的博客 1万+

IOS开发使用 constraints

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

wokaonimama的专栏 3877

CF鼠标宏防封指南:手把手教你调校罗技G HUB压枪脚本的延迟与随机数

本文详细解析了如何通过罗技G HUB的Lua脚本功能调校鼠标宏,实现拟真操作体验。重点介绍了随机数应用、动态后坐力补偿和智能操作序列等高级技术,帮助玩家在不违反游戏规则的前提下提升操作精度。

weixin_26841957的博客 333

ios 约束(五)

1、用格式字符串将试图对齐并灵活调整其尺寸     通过约束规则,我们很容易就能指定视图的对齐方式:     1、“H:|[self]”、“H:[self]|”、“V:[self]|”、“V:|[self]”这4种格式字符串分别产生左对齐、右对齐、顶部对齐及底端对齐的效果。     2、向上述字符串中添加表示尺寸关系的谓词,即可实现拉伸至左边界、拉伸至右边界等效果:“H:

ChasingDreamsCoder的博客 754

VC Spyglass实战指南:从零开始掌握CDC约束配置与调试

本文详细介绍了如何使用VC Spyglass进行CDC约束配置与调试,从基础环境搭建到典型CDC问题调试实战,帮助开发者快速掌握跨时钟域验证技术。通过TCL脚本和SDC约束的深度解析,提升CDC验证效率,避免常见设计风险。

weixin_26757925的博客 294

保姆级教程:在DolphinScheduler 3.x中配置Apache SeaTunnel任务(Flink/Spark双引擎)

本文提供了一份详细的教程,指导如何在DolphinScheduler 3.x中配置Apache SeaTunnel任务,支持Flink和Spark双引擎。从环境准备、脚本选择到配置文件编写和任务调度优化,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效集成SeaTunnel到海豚调度系统中。

weixin_42524945的博客 194

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

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

青霜。的专栏 1万+

【Python机器学习】主成分分析(PCA):高维数据的“瘦身术“

主成分分析(PCA)的历史可以追溯到1901年,当时Karl Pearson首次提出了这个概念。在计算机还不存在的年代,PCA是一个纯粹的数学构想,用来简化多变量数据的分析。几十年后,当计算机出现时,PCA成为了数据分析中最早实现的算法之一。从那时起,超过一个世纪的发展中,PCA一直保持着其核心的理论框架和实用价值,这本身就是对这个方法深刻科学性的证明。在现代深度学习时代,许多人可能会认为PCA已经过时了。但事实恰好相反。

nmdbbzcl的博客 981

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

『OPEN3D』1.2 mesh处理 python篇

介绍open3d对mesh的基本处理操作

NNNNNathan的博客 4648

今日头条面试——iOS开发面试题

layoutIfNeeded和setNeedsLayout的区别。* Pod update和pod install的区别。* 10、autoreleasepool的使用场景。* 如何hook一个对象的方法,而不影响其它对象。* 数组cop后里面的元素会复制一份新的吗。* 介绍项目,主要介绍自己强项一点的地方。* assing可以使用在对象中吗。* isEquel和hash的关系。* 4、谈谈runtime的理解。* 8、谈谈runloop的理解。* copy和strong的区别。

FPGA/MATLAB学习教程/源码/项目合作开发 593

iOS开发之autoLayout constraint

前言 ios设备的尺寸越来越多,针对一款app可能要适配到多种设备,多种尺寸。所以,我们期望我们的app能够autoLayout。本文主要介绍在Xcode中使用constraint。未来会不定期对此文进行更新。 约定 本文中view指代从Objuect Library中拖拽出来的各种view 基础 一个view在界面显示,至少有三种决定条件 一、自身大小:如

tubiebutu的专栏 771

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IOS布局笔记三(使用不同父类的 view 进行约束)

最终效果图如下: 很多限制条件都已经应用到了视图中,我们在解释一下: ·在我们的视图控制器的主视图中有两个灰色的视图。两个视图距视图控制器的视图左 边和右边都有一个标准的空白距离。视图的顶部距顶部的视图的顶部必须有一个标准的空白 距离。在两个灰色视图之间要有一个标准的垂直空白距离。 ·在两个灰色视图里的垂直中央都要有一个按钮。 ·

Lves Li的专栏 3557

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

PureLayout约束可视化:使用Pasteboard调试布局

在iOS和macOS开发中,Auto Layout(自动布局)是构建灵活界面的核心技术,但约束冲突和布局异常常常让开发者头疼。PureLayout作为简化Auto Layout操作的强大框架,不仅提供了简洁的API,还隐藏着一个鲜为人知的调试技巧——通过剪贴板(Pasteboard)可视化约束信息。本文将带你探索如何利用这一功能快速定位布局问题,提升调试效率。 ## 约束调试的痛点与解决方案 ...

gitblog_00201的博客 770

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

告别布局混乱:Masonry约束动态更新与流畅动画实现指南

你是否还在为iOS应用中的界面布局动态变化而烦恼?按钮点击后尺寸无法平滑过渡?多视图联动时动画卡顿?本文将通过Masonry框架的约束更新机制和动画实现技巧,帮助你轻松解决这些问题,让界面交互更加流畅自然。读完本文,你将掌握约束更新的核心方法、动画实现的最佳实践,以及如何避免常见的布局冲突问题。 ## 约束更新基础:从静态到动态的转变 在传统Auto Layout(自动布局)中,修改约束往往需...

gitblog_00290的博客 718

如何实现Masonry动画约束:动态更新和重做约束的终极指南

Masonry是一个强大的iOS自动布局库,它通过简化的链式语法让AutoLayout NSLayoutConstraints变得简单易用。对于需要动态更新界面布局的开发者来说,掌握Masonry的动画约束实现技巧至关重要。本文将详细介绍如何使用Masonry实现动态更新和重做约束,让您的iOS应用界面更加生动流畅。🚀 ## 为什么需要动画约束? 在iOS开发中,界面元素的动态变化是提升用户

gitblog_00415的博客 775

ios 旋转屏幕试图切换_ios 屏幕旋转适配(横屏适配)

屏幕的横竖屏适配有很多种,今天写直播demo的时候发现给播放器一套约束或者frame,自动切换横屏的时候布局混乱拉伸。这第一种方法,直接监听横竖屏切换,然后改变布局代码,纯代码布局基本都是这个思路。/** 注册屏幕横竖通知 *///开启和监听 设备旋转的通知(不开启的话,设备方向一直是UIInterfaceOrientationUnknown)if (![UIDevice currentDevic...

weixin_29432421的博客 809

如何在 iOS 9 中创建 Stack View

2015-10-08  510 文章目录 作者:Arthur Knopper,原文链接,原文日期:2015-09-14 译者:小铁匠Linus;校对:numbbbbb;定稿:小锅 在 iOS 9 之前,即使是创建相对简单的用户界面(User Interface),也需要在使用自动布局(Auto Layout)时添加大量的约束(Constraint)。在 iOS 9 中,苹果官方

gu_jin_xiao的专栏 578

掌握Masonry复合约束:edges、size、center高级用法全解析

Masonry是iOS开发中最流行的自动布局框架之一,它通过简洁的链式语法让复杂的AutoLayout约束变得直观易用。本文将深入探讨Masonry中edges、size和center这三个核心复合约束的高级用法,帮助开发者快速掌握界面布局的精髓。 ## 一、edges约束:快速实现边缘对齐 edges约束是Masonry中最常用的复合约束之一,它能同时设置视图的上、下、左、右四个边缘,实现与

gitblog_00292的博客 511

Masonry多平台支持终极指南:iOS、macOS、tvOS全适配详解

Masonry是一款功能强大的Auto Layout框架,专为iOS、macOS和tvOS平台设计,帮助开发者轻松实现复杂的界面布局。本指南将详细介绍如何利用Masonry实现跨平台的界面适配,让你的应用在不同设备上都能呈现出完美的布局效果。 ## 为什么选择Masonry进行多平台开发 Masonry提供了简洁直观的API,让开发者能够以代码的方式快速定义视图之间的约束关系。相比系统原生的A

gitblog_00693的博客 1061

IOS9:如何在 iOS 9 中创建 Stack View

作者:Arthur Knopper,原文链接,原文日期:2015-09-14 译者:小铁匠Linus;校对:numbbbbb;定稿:小锅 在 iOS 9 之前,即使是创建相对简单的用户界面(User Interface),也需要在使用自动布局(Auto Layout)时添加大量的约束(Constraint)。在 iOS 9 中,苹果官方引进了 Stack View,它会为每个新增的子视图自

枫岭晚 625

FLKAutoLayout性能优化:提升iOS应用布局效率的3个关键点

FLKAutoLayout是一个功能强大的UIView分类库,它让开发者能够轻松地在代码中创建iOS应用的布局约束。对于追求流畅用户体验的iOS应用来说,布局性能至关重要。本文将分享三个提升FLKAutoLayout性能的关键技巧,帮助你打造响应更快的iOS应用。 ## 1. 优化约束创建:减少不必要的计算开销 FLKAutoLayout提供了多种便捷的约束创建方法,但不当使用可能导致性能问题

gitblog_00910的博客 603

利用xib对控件添加约束 适配屏幕

我一直喜欢用纯代码写项目,很少用XIB,但是纯代码有时候速度会比较慢,偶尔也用一下XIB也是不错的选择 原文地址:http://blog.it985.com/11997.html 约束,就是对控件的限制条件,限制条件的作用就是为了让我们搭建页面适应不同的屏幕,当然也是页面的兼容性,兼容多个屏幕 下面切入正题,如何为控件添加约束。添加约束主要用到下面的三个部分。 从左到右

清秋锁梦的博客 1281

终极指南:Cartography优先级冲突解决与iOS布局调试实战技巧

Cartography是一款强大的Swift声明式Auto Layout DSL,它让iOS开发者能够以简洁直观的方式定义界面布局。然而在复杂界面开发中,优先级冲突问题时常出现,导致布局异常或警告。本文将分享如何快速识别、分析和解决Cartography中的优先级冲突,掌握专业的iOS布局调试方法。 ## 理解Cartography中的优先级机制 在Cartography中,每个约束都可以设置

gitblog_00789的博客 695

iOS蓝牙开发必知:Connection Parameters参数详解与实战调优指南

本文深入解析iOS蓝牙开发中的Connection Parameters参数,包括Connection Interval、Slave Latency和Supervision Timeout的详细作用与调优策略。通过实战案例和性能矩阵,帮助开发者在功耗与性能间找到最佳平衡,提升BLE设备在iOS平台上的连接稳定性和用户体验。

weixin_29178069的博客 546

攻克 Compose Multiplatform iOS 滚动难题:UIKitView 交互深度优化指南

在跨平台开发中,UI 组件的兼容性往往是最棘手的挑战。当使用 Compose Multiplatform 开发 iOS 应用时,许多开发者都会遇到 `UIKitView` 与滚动容器的交互问题——列表滑动卡顿、手势冲突、内容截断等现象屡见不鲜。这些问题不仅影响用户体验,更可能导致核心功能失效。 本指南将通过实际案例,从布局约束、手势传递、性能优化三个维度,系统解决 `UIKitView` 在 i...

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值