3.0 Introduction (Auto Layout and the Visual Format Language)

本文介绍了iOS开发中AutoLayout的基本原理与使用方法,并详细解释了如何通过NSLayoutConstraint实现界面元素布局。此外还介绍了Visual Format Language,这是一种更为直观且强大的布局方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

调整UI的布局总是令人头大,我们需要用很大一部分代码来设置UI的布局,使得他能在不同的版本,不同的设备上友好显示。嗨...做人难,做程序员更难。
为了更好的帮我们解决这个问题,苹果从OS X引进了Auto Layout,我们来稍微了解一下:
苹果注意到,一大部分的的界面布局可以用一个方程来解决,即:
object1.property1 = (object2.property2 * multiplier) + constant value
ios用NSLayoutConstraint来包装了这个方程。不过每一个constraint对象只能包装一个方程。如果你想把一个button置于父控件的中间,你就不得不用两个constraint对象来分别包装x坐标的等式,与y坐标的等式。等式内容如下:
button.center.x = (button.superview.center.x * 1) + 0
button.center.y = (button.superview.center.y * 1) + 0

不过这还是有些麻烦,本章里面我们将学到Visual Format Language,这个更NB,更好用。

<一>
constrain的使用规则:

(1)如果这两个view的直接父控件相同,则把constraint加到直接父控件里面
(2)如果其中一个是另一个的父控件,则加到父控件里面
(3)如果这两个view的直接父控件不同,但某个祖父控件相同,则加到那个祖父控件里面。

<二>
constrain是如何包装那个等式的呢?
先看下类方法NSLayoutConstraint constraintWithItem:<#(id)#> attribute:<#(NSLayoutAttribute)#> relatedBy:<#(NSLayoutRelation)#> toItem:<#(id)#> attribute:<#(NSLayoutAttribute)#> multiplier:<#(CGFloat)#> constant:<#(CGFloat)#>

constraintWithItem: 对应object1
attribute:对应property1
relatedBy:对应方程中的等号,也可以是大于,小于
toItem:对应object2
attribute:对应property2
multiplier:对应方程中的multiplier
constant:对应方程中的constant value

<三>
如何把创建出来的contrain加到适当的view里面去呢?
addConstraint: 加入一个contraint
addConstraints: 加入一堆contraints (NSArray)

 

利用Auto Layout可以完成很多事情。但是,随着认识的深入,我们发现Auto Layout 自动给我们创建了很多的constraints。所以我们的代码也会变得越来越难以控制。因此,苹果创建了Visual Format Language。通过这个我们可以很轻松的表达我们想要的效果。比如让两个按钮间隔100points。我们可以这样写 [button1]-100-[button2]。
对于这样的写法,constraint也有相应的类方法constraintsWithVisualFormat: options:metrics:views:
constraintsWithVisualFormat: Visual Format Language表达式(NSString)
options: NSLayoutFormatOptions 一般传0
metrics: 常量值字典,为简单起见,我们这里先传0
views: 使用这个表达式的view的dictionary。用NSDictionaryOfVariableBindings来创建此Dictionary.

有了这些知识铺垫,我们可以开始学习这章的知识了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值