自动布局概念
自动布局中基本的构建单位是约束,约束表达了控件在页面中的布局规则。例如,你可以创建一个约束来定义控件的宽带,或者他距离另一个控件的水平距离。你可以添加、删除约束,或者修改约束的值来修改页面布局。
当在一个页面中计算一个控件运行状态的位置时,自动布局系统在同一时间考虑所有的约束,并且设置控件最好的位置以满足所有的约束。
约束基础知识
你可以把约束定义为一种类似“人类表述”的数字表达的声明。如果你定义一个按钮的位置。比如,你可能会说,按钮左边的边距应该距离他父视图左边距20pt。更正式的,他会翻译成
button.left = (container.left+20),它可以转换成另一种表达形式 y=mx+b,其中
y 和x是视图的属性
m和b是数字
视图的属性可以是 left, right, top, bottom, leading, trailing, width, height, centerX, centerY或者baseLine
左边距和右边距属性类似那些从左到右的语言比如英语,或者那些从右到左的语言类似
当你创建约束时,左边距和右边距是默认的。除非你用约束来布局使得任何语言都适配(例如订单的掌握和一系列分类的详细视图),否则你应该通过左边距和右边距来约束你的布局,使得布局在任何语言下都能正常匹配
约束也有其他属性集
1、常数值 约束的大小或者抵销
2、关系 自动布局支持的不仅仅是视图属性的常量值。你可以使用类似高于或者等于这些不固定值来定义视图的关系。比如 一个视图 widht>=20,或者甚至textview.leading>=(superview.leading+20)
3、优先级约束有一个优先级属性,拥有高优先级的约束优先适配页面。NSLayoutPriorityRequired 是默认的优先级,这意味着这级别的约束必须适配页面。即使不可能完成适配,布局系统必须得到一个尽可能满足适配他的约束。
属性优先级允许你表述更有用的应用行为。例如,人们除非有更重要的约束需要占用,一般都会尽可能的通过约束来适配内容。 如果想要了解更多关于属性优先级,可以查看NSLayoutPriority
内在内容的大小
对应像按钮之类的叶子控件,它需要了解的是他在父视图中的大小而不是怎么在父视图中用代码固定大小。这是通过内在的大小来确定的,它(内在内容大小)告诉视图的约束他包含的内容是不固定的,而不是显示的告诉他内容多少。
如比,一个文本框,你可以通过xcode中的Editor > Size To Fit Content) 来适配他的内容大小。这可以让你的文本框在不同内容下面能合适的增长、收缩.
应用框架
我们是通过自动布局系统对控制器和视图进的自定布局进行分配,而不是所谓不能的控制器来进行处理。这种方式减少了控制器的复杂程度,让人不需要修改代码就可以方便的进行视图的重新设计。
你或许希望通过控制器在运行时候添加、删除、调整约束。想要了解更多通过代码管理约束,可以阅读“以编程方式使用自动约束”
控制器的角色
尽管一个视图指定起内在内容大小对使用视图的用户是多么重要。例如,在默认情况下,按钮,强烈的希望尽可能在垂直方向上展示他的内容(按钮真的应该是自然高度),在水平方向不一定全部展示他的内容(额外的标题和边框的边缘之间的填充是可以接受的)。
在两个方向强烈抵制压缩或剪切的内容
在一个用户界面中包含2个相邻的按钮。例如,他应该由控制器觉得哪个按钮应该占用额外的空间,只有一个按钮优先占用?2个按钮都彼此都占用?或者2个按钮均分多余空间?如果页面没有多余的空间来放置2个按钮,第一个按钮剪切空间?两个按钮都剪切空间?等等
你可以设置视图的hugging和compression属性,通过setContentHuggingPriority:forAxis:和setContentCompressionResistancePriority:forAxis: 来设置。默认情况下,所有UIKit和AppKit-supplied视图都有NSLayoutPriorityDefaultHigh或者NSLayoutPriorityDefaultLow.
之一。
分享到:
相关推荐
吉德 ... Go语言代表了简单,优雅和强大的特殊组合,是一种编程乐趣,目前是Gide完全支持的主要语言。 我们的目标是在IDE中捕获其中一些Go属性。 Gide的一些主要功能包括: 设计用作通用文本编辑器和
根据给定文件“maven-user-guide.pdf”的标题、描述、标签及部分内容,我们可以提炼出一系列与Maven相关的关键知识点,Maven是一种项目管理和综合工具,主要用于Java项目,它通过一个项目对象模型(POM)来管理项目...
【标题】"gide_command.rar_Java_" 是一个与Java编程相关的压缩文件,其中包含了多个源代码文件和文本文件,主要是解决"修道士过河"问题。这个问题是一个经典的逻辑问题,通常用来锻炼程序员的逻辑思维和算法设计...
在2015年的欧洲全球物联网日(GIDE2015)上,这个话题可能是讨论的焦点。活动可能聚集了来自行业、学术界和政府的专家,共同讨论如何在物联网的快速扩张中确保设备的身份验证、数据安全和用户隐私。 JavaScript作为...
RouterOS 6.44.3 L5许可,2G内存,2CPU, 2G IDE盘,非60M硬盘,适合学习测试使用,可用于ESXi 5.5 及以上虚拟机,X86,遗憾的是此版未能破解成64位版,许可也只到L5 (导入的时候提示SHA1值不对的话,请把ROS6.mf里面...
BaseFragment封装基类,懒人加载,丢进去就可以直接使用
接着,分别使用BIO-GIDE膜、复合BIO-GIDE膜(即将BMP复合到BIO-GIDE膜上)以及空置组(对照组),来修复这些骨缺损。这些操作都是为了通过X线和组织学方法来观察和比较不同材料下新骨的形成情况。 ### 材料与方法 ...
### Ada编程语言简介 Ada是一种强类型、支持并发处理与异常处理等特性的高级编程语言。根据提供的内容,我们可以了解到Ada编程语言的...对于想要学习Ada语言的开发者来说,掌握其基本概念和特性是非常重要的第一步。
AP6236_4.2最新固件移植必须的源码和固件 SDK通过瑞芯微代码服务器对外发布。其编译开发环境,参考附录1。 客户向瑞芯微技术窗口申请SDK,需同步提供SSH公钥进行服务器认证授权,获得授权后即 ...
CCS学习入门资料 ---CCS user guide ---使用CCS进行DSP编程(一) ---使用CCS进行DSP编程(二) ---使用CCS进行DSP编程(三) ---使用CCS进行DSP编程(四)
主要思想是为某些应用程序在markdown中编写gide,可以将其编译为程序。 对于第一个版本,我将为此类代码简单地创建regexp: ```python here are your code ```EOF 并将测试该工具。 运行它python gtc.py app.mdpy ...
图片加载将会使用Glide进行加载,在使用Gide时还会进行二次封装,封装后对应的类文件为ImageLoader,放置在Utils包中 Utils Utils包中会添加一些常用的工具类,例如: LogUtils 关于Log日志打印相关的工具类,可以...
《Quectel Secure Boot指南》是一份为Quectel设备提供的安全启动用户手册,这份文档的主要目的是为了向Quectel的客户提供及时、全面的服务。手册的编写基于客户的实际需求,Quectel公司在其信息质量方面做出了很大的...
-Andre Gide”入门指南目前,只有支持真彩色的终端才能工作。 确保您已使用自己喜欢的插件管理器在vimrc First install插件中设置了termguicolors。 请注意,您应该使用插件管理器的内置工具来重命名插件。 vim-plug...
"三级菜单"的概念通常指的是在用户界面中,为了更好地展示和操作复杂数据结构,如目录树,而设计的多级导航结构。这种结构允许用户逐级深入地浏览和操作内容,常见于文件管理器、网站导航、应用程序菜单等场景。 ...
"main.psd"、"main02.psd"、"gide.psd"等文件可能代表网站的主要页面布局,比如首页、引导页或者指南页,每个PSD文件都对应着网站的一个关键部分,设计师通过它们来构建网站的结构和内容。"ill.psd"可能是插图或图像...
网络请求框架 网络请求框架将会采用 RxJava + Retrofit + OkHttp的方式,在网络请求中会对三者...图片加载将会使用Glide进行加载,在使用Gide时还会进行二次封装,封装后对应的类文件为ImageLoader,放置在Utils包中
DbVisualizer is a feature rich, intuitive multi-database tool for developers and database administrators, providing a single powerful interface across a wide variety of operating systems....