iOS_关于封装AutoLayout的框架ZLAutoLayout

目前在iOS开发中,越来越多的不同尺寸的屏幕,让屏幕适配成为开发要点。

回顾之前的开发中,我们要么是用xib,要么用代码编写控件,需要拉伸则设置View的autoresizingMask里面的枚举值来进行设置拉伸属性。

这些都是绝对布局。

而AutoLayout的优势在那呢?

AutoLayout是相对布局,也可以绝对布局。

什么是相对又什么是绝对呢?

相对是指,可以有参照点(View)来进行对它参考点进行约束。

绝对是指,只针对父View来进行布局排版,不能根据兄弟View来进行布局。

网上的AutoLayout教程已经非常之多。

那么我现在想讲的是ZLAutoLayout的框架,我自己抽空封装下,如果存有bug,请及时反馈~~

代码+示例程序的gitHub地址:https://github.com/MakeZL/ZLAutoLayout

底层也是封装了AutoLayout的API,只不过写起来要简单快速很多。

只需要把分类文件导入到项目里即可。

-----

常用的几个方法

-----

// 相对父视图来进行约束,比如view.left = view.superview.left + 可选的inset.

- (void)autoPinSuperViewDirection:(ZLAutoLayoutDirection)direction;

- (void)autoPinSuperViewDirection:(ZLAutoLayoutDirection)direction withInset:(CGFloat)inset;

// view对view进行约束,比如aView.left = bView.left + 可选的multiplier + inset.

- (void)autoPinDirection:(ZLAutoLayoutDirection)direction toPinDirection:(ZLAutoLayoutDirection)toDircetion ofView:(UIView *)view;

- (void)autoPinDirection:(ZLAutoLayoutDirection)direction toPinDirection:(ZLAutoLayoutDirection)toDircetion ofView:(UIView *)view withInset:(CGFloat)inset;

- (void)autoPinDirection:(ZLAutoLayoutDirection)direction toPinDirection:(ZLAutoLayoutDirection)toDircetion ofView:(UIView *)ofView multiplier:(CGFloat)multiplier withInset:(CGFloat)inset;

// 设置view的尺寸,宽高或者宽于高

- (void)autoSetViewSize:(CGSize)size;

- (void)autoSetViewSizeWidthOrHeight:(ZLAutoLayoutSize)alSize withInset:(CGFloat)inset;

// view相对superView的垂直方向

- (void)autoSetAlignToSuperView:(ZLAutoLayoutAlign)align;

- (void)autoSetAlignToSuperView:(ZLAutoLayoutAlign)align withInset:(CGFloat)inset;

// view相对view的垂直方向 + 可选的inset

- (void)autoSetAlign:(ZLAutoLayoutAlign)align ofView:(UIView *)ofView;

- (void)autoSetAlign:(ZLAutoLayoutAlign)align ofView:(UIView *)ofView withInset:(CGFloat)inset;

// 让view与superView的约束一样

- (void)autoEqualToSuperViewAutoLayouts;

---- 部分代码实例 ----

两个View相对布局

// 实例两个View
    UIView *redView = [UIView instanceAutoLayoutView];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];

    UIView *blueView = [UIView instanceAutoLayoutView];
    blueView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:blueView];

    // 相对父控件的Left/Top
    [redView autoPinSuperViewDirection:ZLAutoLayoutDirectionLeft];
    [redView autoPinSuperViewDirection:ZLAutoLayoutDirectionTop];
    // 设置redView的宽为100,高为200
    [redView autoSetViewSize:CGSizeMake(100, 200)];

    // 设置blueView的宽跟高跟redView相同
    [blueView autoSetViewSizeWidthOrHeight:ZLAutoLayoutSizeHeight ofView:redView];
    [blueView autoSetViewSizeWidthOrHeight:ZLAutoLayoutSizeWidth ofView:redView];
    // 设置blueView的Top与Left相对redView来布局
    [blueView autoPinDirection:ZLAutoLayoutDirectionTop toPinDirection:ZLAutoLayoutDirectionBottom ofView:redView withInset:20];
    [blueView autoPinDirection:ZLAutoLayoutDirectionLeft toPinDirection:ZLAutoLayoutDirectionLeft ofView:redView];

运行效果

代码是个人封装,如果存在bug,请及时联系我哦~~

时间: 2024-10-13 01:52:24

iOS_关于封装AutoLayout的框架ZLAutoLayout的相关文章

利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)

最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口: 1.public Connection getConnection()   获得数据库的连接 2.public boolean updateByPreparedStatement(String sql, List<Object>params)throws SQLException  更新数据库

App 组件化/模块化之路——如何封装网络请求框架

App 组件化/模块化之路——如何封装网络请求框架 在 App 开发中网络请求是每个开发者必备的开发库,也出现了许多优秀开源的网络请求库.例如 okhttp retrofit android-async-http 这些网络请求库很大程度上提高程序猿的编码效率.但是随着业务的发展,App 变得越来越大,我们将这些网络请求库加入到项目中直接使用,对我们业务类的入侵是非常强的.如果要进行业务分离时,这些网络请求代码将是一个阻止我们进一步工作的绊脚石.对开发者来说是非常痛苦的. 因此我们构建的网络请求框

iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework

编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 由于bundle是静态的,所以可以将“iOS开发之静态库(三)—— 图片.界面xib等资源文件封装到.a静态库”中生成的“MyToolsWithAssetsA.bundle”文件直接拿过来使用. 二.创建静态框架 创建过程参考“iOS开发之静态库(四)—— 静态框架framework制作”,里面介绍非常详细. 静态库代码借用“iOS开

[Android]OkHttp的简单封装-辅助框架

序言 OkHttp 的强大算是毋庸置疑了:OkHttp 基本在网络层能完成任何事情,适用任何情况:正因为如此 OkHttp 每次构建一个请求的时候不得不写大量的代码来完成相应的配置.在这里分享一个极限封装OkHttp的辅助框架,通过该框架能最大程度简化你的开发负担.好话不多说,往下看看就知道好不好. 原生 在这里举例几个原生情况下使用 okhttp 的情况. GET public void get() { Request.Builder builder = new Request.Builder

纯 Swift 封装的 SQLite 框架:SQLite.swift

SQLite.swift 是一个使用纯 Swift 语言封装 SQLite3 的操作框架. 特性: 简单的查询和参数绑定接口 安全.自动类型数据访问 隐式提交和回滚接口 开发者友好的错误处理和调试 文档完善 通过广泛测试 示例代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 import SQLite   let db = Database("

简单封装自定义MVC框架

自定义Mvc框架结构及其使用方法 一,什么是MVC框架 MVC框架全名是model(模型)controller(控制器)view(视图文件)所构成的一种开发框架,是一种典型的软件设计典范,用一种业务逻辑,数据,显示相分离的方法组织代码,其好处是将业务逻辑聚集到一个部件里面,在改进和指定个性化页面的同时不需要重新编写业务逻辑,MVC被独特的发展起来用于映射传统的输入,处理,显示在一个业务逻辑的图形化业务界面中. 二,组成 ①,model(模型):主要负责具体功能的实现,一个模型对应一种功能 ②,v

自己封装的Ajax框架——myAjax.js

以下是myAjax.js文件的全部内容,用法都在注释中,请查看.    封装的不好,请各位批评指正~~ /** * myAjax.js file is used by created Ajax in Web page.  这个文件是封装好的Ajax包,可以直接调用 * @Author: Alvin Xing  邢** * @Param:  servlet: It is servlet that deal with this Ajax.  需要处理的servlet(或者jsp或其他html) *

Anroid-async-http封装网络请求框架源码分析

Android-async-http开源项目可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来非常简单, 这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法处理请求结果. 主要特点:处理异步Http请求,并通过匿名内部类处理回调结果,Http异步请求均位于非UI线程,不会阻塞UI操作,通过线程池处理并发请求处理文件上传.下载,响应结果自动打包JSON格式. 一, Android-async-http

封装selenium自动化框架中的截图功能

对selenium自带的截图功能进行封装: 以下为封装的代码,自定义一个.py文件即可,图片路径自己设置一个. 1 #coding:utf-8 2 3 class Screen(object): 4 ''' 5 封装的截图类,webdriver自带的get_screenshot_as_file() 6 在使用过程中,注意driver参数的传递 7 ''' 8 def __init__(self, driver): 9 ''' 10 写一个构造函数,有一个参数driver 11 ''' 12 se