iOS使用Autolayout解决横竖屏控件差别较大

2018-02-23  本文已影响0人  小东邪啊

iOS使用Autolayout-SizeClass解决横竖屏控件位置差别较大情况


需求:

1. 通常横竖屏转换后如果使用约束会按照正常的横竖屏下同一个约束进行布局,但是如果某些APP中横竖屏控件位置差别较大时则显得不适用。

比如控件hello这个Label在横屏下为距离父控件顶部为0,横向垂直于父控件中心如图1,而在竖屏下如果按照自动适配则如图2,但是如果我们想要它在竖屏为图3的效果(即距离父控件左边距离为0,距离父控件上部距离为100)则需要重新设计不同屏幕状态下的约束。本例则为解决此类需求

Demo

2. 本例主要使用Autolayout-SizeClass实现同一控件不同状态下的布局,好处是像iPhone横竖屏风格相差较大以及iPhone与iPad同一界面布局相差较大时我们不需要创建两个View,因为这两个View只是布局不同而功能是完全相同的,所以利用Autolayout可以帮助我们实现不同状态下控件的布局。


适用情况

注意:如上说明,本例为解决横竖屏,iPhone及iPad布局相差较大的情况,所以同一控件的功能并没有改变,仅仅改变布局位置,本文默认你认为已会添加普通约束。


GitHub地址(附代码) : 控件布局Demo

简书地址 : 控件布局

博客地址 : 控件布局

掘金地址 : 控件布局


总体流程:


Autolayout - Size Class 简介

在这里苹果官方文档,Size Class有详细的介绍有关Autolayout-SizeClass的用法。

在这里不对Autolayout的普通布局做详细介绍了,如果不会使用约束请先学会后再阅读。

Size Class 基本功能

注意:系统会保持对uninstalled元素的引用,因此该元素并没有被释放。

Regular and Compact

背景

目的

以下为各种机型对应的Size Class,我们可依据此对不同机型及横竖屏做适配
Size-Class.png

注意:

Size Class 不是约束和自动布局的代替品,而是让它们更好的一起工作。

使用步骤

1. 在xib中打开使用Autolayout功能
openAutoLayout.png
2. 使用Autolayout 设置xib中控件的布局
hello_landscape.png hello_portraitDefault.png onlyLandscapeSupport.png onlyPortrait.png

注意,当打开AutoLayout功能后,在xib中很多属性左边会有如上的加号按钮,这些即都可通过加号按钮控制不同状态下控件的一些属性,原理正如上所讲,其他情况可自行研究

补充 :

1.为同一条约束赋不同的值

DiffValue.png

2.同一控件不同状态下的颜色,阴影,隐藏状态等等

portraitOther.png

参考文章:苹果官方文档Size Class

上一篇 下一篇

猜你喜欢

热点阅读