iOS-屏幕适配实现(AutoLayout)

 我来答
户如乐9318
2022-07-08 · TA获得超过6671个赞
知道小有建树答主
回答量:2559
采纳率:100%
帮助的人:141万
展开全部

AutoLayout旨在替代Autoresizing,所以在同一个项目中,AutoLayout和Autoresizing是不能共存的,二者只能选其一,如果你选择了AutoLayout,那么Autoresizing自动被屏蔽掉;如果你选择了Autoresizing,那么AutoLayout自动被屏蔽掉。XCode5及其之后的版本,默认新建的项目就是使用AutoLayout

AutoLayout主要是通过控件参照与约束实现,比如控件A相对控件B来说,控件A在控件B的正下方,间距为20px

每在xib或sb中对控件添加一个约束, 就代表添加一个约束对象。比如,给xib中的某个子控件A设置了宽度和高度、距离父控件上下左右之间的间距,就相当于给这个控件添加了6个约束,也就产生了6个约束对象

注意:约束有错误,不代表运行会错误,约束错误同样可以运行

UILabel默认内容的显示方式是垂直居中的。如果用autolayout给UILabel设置约束,只需要设置x、y、width,无需设置height,UILabel会自动包裹内容,并且随内容的多小而变化。如果我们通过约束给定了UILabel的width = 100,但是内容仍然少的可怜,不能包裹,可以把宽度设置为<=100,此时,label的宽高都能包裹住内容。高度的设置同理可证。
当然,我们也可以只给UILabel设置x、y。但必须要保证UILabel的text属性有内容,否则UILabel显示不出来(这是初学者经常犯的错误)。原因在于,UILabel是根据内容自动调整宽度和高度,如果没有内容,那么宽度和高度就是0,导致UILabel无法显示。

一般组合有4种结果(wC hC)、(wR hR)、(wC hR)、(wR hC) (w是width h是height,C是Compact R是Regular)
- (wC hR):它适用于一切尺寸的竖屏iPhone
- (wR hR):适用所有横屏、竖屏iPad
- (wC hC):适用于iPhone的横屏上(除了iPhone11、iPhone Plus等)
- (wR hC):适用于iPhone 11 、iPhone Plus的横屏等

根据不同布局,不同分类选项,对相应的布局产生影响,总结如下:

在不同布局下,同一控件通过设置不同常数值实现相同效果,可以在配置在添加布局,而不是添加两个约束

在不同设备上修改控件属性,比如在iPhone竖屏上字体比较小,在iPhone横屏上字体比较大,这时候使用Vary for Traits就没有效果了,我们只需要为控件属性增加布局,如果不需要点叉删除

如果想指定尺寸选择一个新控件,可以在控件属性最下端,操作是类似,左边的加号指定尺寸,Installed表示通用

注意:
1.先禁止 autoresizing 功能,设置要添加约束的控件的下面属性为 NO

2.添加约束之前,一定要保证相关控件都已经在各自的父控件上

3.不用再给 view 设置 frame

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式