多尺寸屏幕的自动适配 AutoLayout (纯代码方式)

android 屏幕适配 diens文件自动生成源码 将源码复制到eclipse java项目下 在main方法中 修改相应的尺寸 即可生成相应的values-480*320 values-800*480 等尺寸文件 立即下载
关于AutoLayout,最早从iOS6开始引入使用。

主要功能是使用约束,对视图进行相对布局,以适应不同屏尺的变换。

网上大量的资料都在介绍xib和storyboard,如何使用AutoLayout,说纯代码使用AutoLayout进行UI布局的越来越少。对于我这个习惯了代码UI布局的人,写个备忘:

AutoLayout是什么?

使用一句Apple的官方定义的话

AutoLayout是一种基于约束的,描述性的布局系统。 Auto Layout Is a Constraint-Based, Descriptive Layout System.
关键词:
  • 基于约束 - 和以往定义frame的位置和尺寸不同,AutoLayout的位置确定是以所谓相对位置的约束来定义的,比如x坐标为superView的中心,y坐标为屏幕底部上方10像素等
  • 描述性 - 约束的定义和各个view的关系使用接近自然语言或者可视化语言(稍后会提到)的方法来进行描述
  • 布局系统 - 即字面意思,用来负责界面的各个元素的位置。
总而言之,AutoLayout为开发者提供了一种不同于传统对于UI元素位置指定的布局方法。以前,不论是在IB里拖放,还是在代码中写,每个UIView都会有自己的frame属性,来定义其在当前视图中的位置和尺寸。使用AutoLayout的话,就变为了使用约束条件来定义view的位置和尺寸。这样的最大好处是一举解决了不同分辨率和屏幕尺寸下view的适配问题,另外也简化了旋转时view的位置的定义,原来在底部之上10像素居中的view,不论在旋转屏幕或是更换设备(iPad或者iPhone5或者以后可能出现的mini iPad)的时候,始终还在底部之上10像素居中的位置,不会发生变化。 总结
使用约束条件来描述布局,view的frame会依据这些约束来进行计算 Describe the layout with constraints, and frames are calculated automatically.

AutoLayout和Autoresizing Mask的区别

Autoresizing Mask是我们的老朋友了…如果你以前一直是代码写UI的话,你肯定写过UIViewAutoresizingFlexibleWidth之类的枚举;如果你以前用IB比较多的话,一定注意到过每个view的size inspector中都有一个红色线条的Autoresizing的指示器和相应的动画缩放的示意图,这就是Autoresizing Mask。在iOS6之前,关于屏幕旋转的适配和iPhone,iPad屏幕的自动适配,基本都是由Autoresizing Mask来完成的。但是随着大家对iOS app的要求越来越高,以及已经以及今后可能出现的多种屏幕和分辨率的设备来说,Autoresizing Mask显得有些落伍和迟钝了。AutoLayout可以完成所有原来Autoresizing Mask能完成的工作,同时还能够胜任一些原来无法完成的任务,其中包括:
  • AutoLayout可以指定任意两个view的相对位置,而不需要像Autoresizing Mask那样需要两个view在直系的view hierarchy中。
  • AutoLayout不必须指定相等关系的约束,它可以指定非相等约束(大于或者小于等);而Autoresizing Mask所能做的布局只能是相等条件的。
  • AutoLayout可以指定约束的优先级,计算frame时将优先按照满足优先级高的条件进行计算。
总结
Autoresizing Mask是AutoLayout的子集,任何可以用Autoresizing Mask完成的工作都可以用AutoLayout完成。AutoLayout还具备一些Autoresizing Mask不具备的优良特性,以帮助我们更方便地构建界面。


AutoLayout基本使用方法


Interface Builder

这部分网上大量的教程,都是说的这个



手动使用API添加约束

创建
iOS6中新加入了一个类:NSLayoutConstraint,一个形如这样的约束
  • item1.attribute = multiplier ? item2.attribute + constant
对应的代码为
1 [NSLayoutConstraint constraintWithItem:button
2                              attribute:NSLayoutAttributeBottom
3                              relatedBy:NSLayoutRelationEqua
4                                 toItem:superview
5                              attribute:NSLayoutAttributeBottom
6                             multiplier:1.0
7                               constant:-padding]
这对应的约束是“button的底部(y) = superview的底部 -10”。

添加
在创建约束之后,需要将其添加到作用的view上。UIView(当然NSView也一样)加入了一个新的实例方法:
  • -(void)addConstraint:(NSLayoutConstraint *)constraint;
用来将约束添加到view。在添加时唯一要注意的是添加的目标view要遵循以下规则:
  • 对于两个同层级view之间的约束关系,添加到他们的父view上
 
  • 对于两个不同层级view之间的约束关系,添加到他们最近的共同父view上
 
  • 对于有层次关系的两个view之间的约束关系,添加到层次较高的父view上

刷新
可以通过-setNeedsUpdateConstraints和-layoutIfNeeded两个方法来刷新约束的改变,使UIView重新布局。这和CoreGraphic的-setNeedsDisplay一套东西是一样的~


Visual Format Language 可视格式语言

UIKit团队这次相当有爱,估计他们自己也觉得新加约束的API名字太长了,因此他们发明了一种新的方式来描述约束条件,十分有趣。这种语言是对视觉描述的一种抽象,大概过程看起来是这样的: accept按钮在cancel按钮右侧默认间距处 
 


最后使用VFL(Visual Format Language)描述变成这样:
1 [NSLayoutConstraint constraintsWithVisualFormat:@\\"[cancelButton]-[acceptButton]\"
2                                         options:0
3                                         metrics:nil
4                                           views:viewsDictionary];
其中viewsDictionary是绑定了view的名字和对象的字典,对于这个例子可以用以下方法得到对应的字典:
1 UIButton *cancelButton = ...
2 UIButton *acceptButton = ...
3 viewsDictionary = NSDictionaryOfVariableBindings(cancelButton,acceptButton);
生成的字典为
{ acceptButton = ""; cancelButton = ""; } 
当然,不嫌累的话自己手写也未尝不可。现在字典啊数组啊写法相对简化了很多了,因此也不复杂。 在view名字后面添加括号以及连接处的数字可以赋予表达式更多意义,以下进行一些举例:
  • [cancelButton(72)]-12-[acceptButton(50)]
    • 取消按钮宽72point,accept按钮宽50point,它们之间间距12point
  • [wideView(>=60@700)]
    • wideView宽度大于等于60point,该约束条件优先级为700(优先级最大值为1000,优先级越高的约束越先被满足)
  • V:[redBox][yellowBox(==redBox)]
    • 竖直布局,先是一个redBox,其下方紧接一个宽度等于redBox宽度的yellowBox
  • H:|-[Find]-[FindNext]-[FindField(>=20)]-|
    • 水平布局,Find距离父view左边缘默认间隔宽度,之后是FindNext距离Find间隔默认宽度;再之后是宽度不小于20的FindField,它和FindNext以及父view右边缘的间距都是默认宽度。(竖线'|‘ 表示superview的边缘)


容易出现的错误

因为涉及约束问题,因此约束模型下的所有可能出现的问题这里都会出现,具体来说包括两种:
  • Ambiguous Layout 布局不能确定
  • Unsatisfiable Constraints 无法满足约束
布局不能确定指的是给出的约束条件无法唯一确定一种布局,也即约束条件不足,无法得到唯一的布局结果。这种情况一般添加一些必要的约束或者调整优先级可以解决。无法满足约束的问题来源是有约束条件互相冲突,因此无法同时满足,需要删掉一些约束。两种错误在出现时均会导致布局的不稳定和错误,Ambiguous可以被容忍并且选择一种可行布局呈现在UI上,Unsatisfiable的话会无法得到UI布局并报错。 对于不能确定的布局,可以通过调试时暂停程序,在debugger中输入
  • po [[UIWindow keyWindow] _autolayoutTrace]
来检查是否存在Ambiguous Layout以及存在的位置,来帮助添加条件。另外还有一些检查方法,来查看view的约束和约束状态:
  • [view constraintsAffectingLayoutForOrientation/Axis: NSLayoutConstraintOrientationHorizontal/Vertical]
  • [view hasAmbiguousLayout]
    • [view exerciseAmbiguityInLayout]


布局动画

动画是UI体验的重要部分,更改布局以后的动画也非常关键。说到动画,Core Animation又立功了..自从CA出现以后,所有的动画效果都非常cheap,在auto layout中情况也和collection view里一样,很简单(可以参考WWDC 2012 Session笔记——219 Advanced Collection Views and Building Custom Layouts),只需要把layoutIfNeeded放到animation block中即可~
1 [UIView animateWithDuration:0.5 animations:^{
2     [view layoutIfNeeded];
3 }];


部分代码

纯净代码UI正常布局后,添加autolayout就可以了,调整相当方便
这是一段水平居中,垂直并列的4个按钮 布局代码
setTranslatesAutoresizingMaskIntoConstraints  是为no,开启AutoLayou.

    //-----autoLayout

    [_btn_1 setTranslatesAutoresizingMaskIntoConstraints:NO];

    [_btn_2 setTranslatesAutoresizingMaskIntoConstraints:NO];

    [_btn_3 setTranslatesAutoresizingMaskIntoConstraints:NO];

    [_btn_4 setTranslatesAutoresizingMaskIntoConstraints:NO];

    

    CGSize winSize = [[iHappySDKSingle shareSingle] getScreenSize];

    CGFloat tpo = _btn_1.frame.origin.y;

    CGFloat hpod = _btn_1.frame.origin.x;

    CGFloat btnH = _btn_1.frame.size.height;

    CGFloat vpod = winSize.width*0.15-btnH;

    

    NSNumber* tp = [NSNumber numberWithFloat:tpo];

    NSNumber* hd = [NSNumber numberWithFloat:hpod];

    NSNumber* vd = [NSNumber numberWithFloat:vpod];

    NSNumber* bh = [NSNumber numberWithFloat:btnH];

    NSNumber* btm = [NSNumber numberWithFloat:vpod*2];

    

    NSDictionary *dict1 = NSDictionaryOfVariableBindings(_btn_1,_btn_2,_btn_3,_btn_4);

    NSDictionary *metrics =@{@"hPadding":hd,@"vPadding":vd,@"top":tp,@"btm":btm,@"btnHeight":bh};

    NSString *vfl1 = @"|-hPadding-[_btn_1]-hPadding-|";

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vfl1

  options:0

  metrics:metrics

views:dict1]];

    NSString *vfl2 = @"|-hPadding-[_btn_2]-hPadding-|";

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vfl2

  options:0

  metrics:metrics

views:dict1]];

    NSString *vfl3 = @"|-hPadding-[_btn_3]-hPadding-|";

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vfl3

  options:0

  metrics:metrics

views:dict1]];

    NSString *vfl4 = @"|-hPadding-[_btn_4]-hPadding-|";

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vfl4

  options:0

  metrics:metrics

views:dict1]];

    NSString *vfl5 = @"V:|-(<=top)-[_btn_1(btnHeight)]-vPadding-[_btn_2(btnHeight)]-vPadding-[_btn_3(btnHeight)]-vPadding-[_btn_4(btnHeight)]-(>=btm)-|";

    if (_btn_1.hidden) {

        vfl5 = @"V:|-(<=top)-[_btn_2(btnHeight)]-vPadding-[_btn_3(btnHeight)]-vPadding-[_btn_4(btnHeight)]-(>=btm)-|";

    }

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vfl5

  options:0

  metrics:metrics

views:dict1]];


纯净代码UI正常布局后,增加一个函数,进行自动布局
水平居中布局:NSLayoutAttributeCenterX
垂直居中布局:NSLayoutAttributeCenterY
以及后面的布局切换动画。

- (void)setAutoLayoutForKuang:(UIView*)imgv

{

    UIView * view = self;

    [imgv setTranslatesAutoresizingMaskIntoConstraints:NO];

    NSDictionary *dict1 = NSDictionaryOfVariableBindings(imgv);

    NSDictionary *metrics = @{@"width":[NSNumbernumberWithFloat:imgv.frame.size.width],

                              @"height":[NSNumber numberWithFloat:imgv.frame.size.height],

                              @"top":[NSNumber numberWithFloat:imgv.frame.origin.y]

                              };

    NSString *vfl1 = @"[imgv(width)]";

[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vfl1

  options:0

  metrics:metrics

views:dict1]];

    NSString *vfl2 = @"V:[imgv(height)]";

[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vfl2

  options:0

  metrics:metrics

views:dict1]];

    [view addConstraint:[NSLayoutConstraint constraintWithItem:imgvattribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:viewattribute:NSLayoutAttributeCenterX multiplier:1 constant:0]];

    [view addConstraint:[NSLayoutConstraint constraintWithItem:imgvattribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:viewattribute:NSLayoutAttributeCenterY multiplier:1 constant:0]];

    //animation

    [UIView animateWithDuration:0.25 animations:^{

        [imgv layoutIfNeeded];

    }];

}


-----------------------------------------
网上相关文章:
-----------------------------------------
2、Autolayout及VFL经验分享      此文包含有一个demo(快速访问下载) 推荐

不是朋友在发愁手动些这些类似脚本的字符:
现在推荐一个开源库给大家

基于E310的纯逻辑代码实现AD9361射频收发 基于微相科技的E310平台实现AD9361的射频收发功能。采用纯逻辑控制的方式,不需要PS参与。实现了用VIO控制收发使能,发射功率,收发频率,数据接口时序控制,接收增益,BIST测试等功能。 阅读详情

相关推荐

F5高可用HA配置详情

F5 HA详细配置

weixin_45843944的博客 3025

WWDC 2012 Session笔记——AutoLayout(自动布局)入门

这是WWDC2012笔记系列中的一篇,完整的笔记列表可以参看这里。如果您是首次来到本站,也许您会有兴趣通过RSS的方式订阅本站。 AutoLayout在去年的WWDC上被引入Cocoa,而在今年的WWDC上,Apple不惜花费了三个Session的前所未见的篇幅来详细地向开发者讲解AutoLayout在iOS上的应用,是由起原因的:iPhone5的屏幕将变为4寸,开发者即将面临为不同尺寸屏幕进

dean19900504的专栏 2008

STM32F407与AD7766实战:如何用SPI+DMA实现高速ADC数据采集(附完整代码)

本文详细介绍了如何利用STM32F407的SPI接口与DMA控制器,高效稳定地驱动24位高精度ADC芯片AD7766,实现高速连续数据采集。通过对比传统中断方式的瓶颈,阐述了SPI+DMA方案如何大幅降低CPU负载,并提供了从硬件设计、CubeMX配置到核心驱动代码的完整实战指南,帮助工程师解决高速ADC数据采集中的性能难题。

weixin_29281941的博客 187

AutoLayout自动布局之代码实现

原理:IOS6.0 之后,苹果优化了UI界面的布局方式,提出了自动布局的概念,和之前的autoresizing相比功能更强大。子视图基于父视图的自动布局显示。都是父视图去添加对子视图的约束。 在这里主要说的是通过代码对自动布局视图的实现。 代码中一般用到的有两个添加约束的方式: 1.- (void)addConstraint:(NSLayoutConstraint *)constraint

xiaoyangsavvy的专栏 567

Ubuntu22.04安装ROS2 —— ROS2 humble 详细图文教程

本文详细介绍了如何在Ubuntu22.04(Jammy)系统下配置ROS2环境,安装RO2软件包,并验证安装成功。ROS2的版本是Humble Hawksbill。:ROS是一个开源的,提供硬件抽象、设备驱动、库、工具和通信机制,支持模块化开发与集成,广泛用于机器人控制和自动化应用。ROS2 相较于 ROS1 在架构设计、通信机制和平台支持等方面做出了改进。ROS1 采用集中式主节点(Master)进行节点间通信,存在单点故障风险,且实时性和跨平台支持较弱。

weixin_49649078的博客 8811

信捷XD/XL系列PLC与C#通信实战:Modbus-RTU协议详解(附完整代码)

本文详细介绍了信捷XD/XL系列PLC与C#通过Modbus-RTU协议实现高效通信的实战指南。从硬件连接到软件配置,再到核心通信功能的实现与优化,提供了完整的代码示例和工业级应用建议,帮助开发者快速构建稳定的自动化通信系统。

weixin_28292761的博客 511

移动端适配

自适应:根据不同的设备屏幕大小来自动调整尺寸、大小响应式:会随着屏幕的实时变动而自动调整,是一种更强的自适应。

abc8002117034的博客 154

微波射频学习笔记18-------偶极子天线和微波天线设计介绍

几种天线设计方法的介绍 一、偶极子天线 1.天线模型 两根紧挨着的金属导体,长度均为四分之一波长,直径均远小于波长,两导体间距也远小于波长。 2.天线性能的设计因素 ① 单个导体长度L:(光速/频率)/4=四分之一波长(在空气中传播的波长),但在导体中传播,波长会变短; ② 导体半径R:远小于波长即可,使用导电率高些的材料,市面上常见直径零点几毫米就挺好,或者用波长/200,得出一个小200的值,也算远小于波长; ③ 两导体间距S:远小于波长即可,可以比半径更小点。 以上三个变量L、R、S,均可在仿真软件

Sil_sprout 1万+

不同屏幕、不同分辨率自适应

这个方法可以通过缩放页面内容来适应不同的屏幕尺寸,但要注意的是,这种方法可能会导致图像和文本的模糊,因此需要谨慎使用。4、使用Grid布局: CSS Grid布局也提供了强大的自适应布局功能,可以根据网格的定义自动调整元素的位置和大小。根据不同的项目需求,可以选择其中一种或多种方法来实现自适应布局。3、使用Flexbox布局: Flexbox布局是一种强大的方法,可以实现灵活的布局,适应不同屏幕大小。6、Vue.js中的动态样式:在Vue.js中,可以使用动态绑定样式来根据组件的状态或属性来改变样式。

qq_42657934的博客 1586

KEPServerEX 6 之 EX 6.11.718.0 发布说明

KEPServerEX 6.11.718.0 发布说明

-雲飛兄-博客 2882

【腾讯小龙虾WorkBuddy专栏05】深度解析WorkBuddy连接器(Connector)

深度解析WorkBuddy连接器(Connector)

AI人人懂 1310

Autolayout 下的 Animation

习惯了用 autosizing masks 来布局UI,感觉用起来又快又熟,但在支持多尺寸屏幕适配下,还是需要使用Autolayout(以及 iOS8 出来的sizeclass)。而为了用户体验,我们又经常用到Animation,如改变一个View的高度,常用方式是: [UIView animateWithDuration:.5f animations:^{

wwmusic的专栏 3413

SD卡烧写Linux kernel——SD卡分区,并烧写uboot,kernel,DTB及filesystem

Linux Ubuntu环境下对SD卡分区(烧写uboot,kernel,及filesystem) 介绍dd命令的使用,SD卡分区、格式化、复制文件等 fdisk命令

weixin_42408707的博客 5056

iPhone多尺寸屏幕适配--等比例数值计算

作为一个iOS开放者,在iPhone6和iPhone6 plus发布之后,慢慢的都会遇到屏幕适配的问题。     那么在一些要求等比例的界面尺寸计算中,如何才能又好又快的完成开发呢?

月若无涯的专栏 2868

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

IOS--通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry)

随着iPhone6/6+设备的上市,如何让手头上的APP适配多种机型多种屏幕尺寸变得尤为迫切和必要。(包括:iPhone4/4s,iPhone5/5s,iPhone6/6s,iPhone 6p/6ps,iPhone7,iPhone 7p)。在iPhone6出现以前,我们接触的iPhone屏幕只有两种尺寸:320 x 480和320 x 568。所以在那个时候使用传统的绝对定位(Frame)方式进行界

timtian008的博客 1906

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ios 自动布局(AutoLayout)和手写布局(frame)

iOS自动布局AutoLayout

baidu_40537062的博客 1706

适配 - Xcode6中自动布局autolayout和sizeclass的使用

一、关于自动布局(Autolayout) 在Xcode中,自动布局看似是一个很复杂的系统,在真正使用它之前,我也是这么认为的,不过事实并非如此。   我们知道,一款iOS应用,其主要UI组件是由一个个相对独立的可视单元构成,这些可视单元有的主要负责向用户输出有用的信息,有些则负责信息的输入(交互),交互的过程中往往还伴随有动画的效果,已达到整个信息传递的连贯性以及用户体验的细腻感。可视单元,

zhou 424

一篇文章详解iOS之AutoResizing、AutoLayout、sizeClass来龙去脉

前言 iPhone自诞生以来,随着其屏幕尺寸不断的多样化,屏幕适配的技术一直在发展更新。目前,iOS系统版本已经更新到9.3,XCode的最新版本已经是7.3,仅iPhone历史产品的尺寸就已经有4种:3.5英寸、4.0英寸、4.7英寸、5.5英寸。最近,iPhone家族又诞生一款iPhoneSE,鉴于这款iPhoneSE的屏幕尺寸和iPhone5S的尺寸一模一样——同样是4.0英寸,广大i

fishmai的专栏 1316

iOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry)

随着iPhone6/6+设备的上市,如何让手头上的APP适配多种机型多种屏幕尺寸变得尤为迫切和必要。(包括:iPhone4/4s,iPhone5/5s,iPhone6/6s,iPhone 6p/6ps)。 在iPhone6出现以前,我们接触的iPhone屏幕只有两种尺寸:320 x 480和320 x 568。所以在那个时候使用传统的绝对定位(Frame)方式进行界面控件的布局还是比较轻松的

shiningchen322的博客 367

ECGLayoutConstraint---多屏幕适配,自动计算各种屏幕下的布局以及字体大小

在实际开发中,由于要实现多屏幕适配,而我们的常见的UI设计,一般只会给我们一套 iphone6 的设计标准,但是适配又必须做,所以,下面的代码会帮你实现各个机型下的实际pt值,方便快捷。 这里会有两套标准:iPhone6 和 iPhone6P 两套标准,自己根据UI设计的标准自由选择。 #import #import typedef NS_ENUM(NSInteger,CYDevic

blog_t的博客 645

iOS 8 AutoLayout与Size Class

转载  http://www.cocoachina.com/ios/20141217/10669.html iOS 8 AutoLayout与Size Class 前言 iOS8和iPhone6发布已经过去蛮久了,广大的果粉终于迎来了大屏iPhone,再也不用纠结为大屏买三星舍苹果了…但是对于iOS开发人员来说,迎来了和Android开发开发一样的问题—>各种

csgcsg123的专栏 337

iOS 9界面适配利器:详解Xcode 7的新特性UIStackView

前言 自适应、适配、布局这几个关键词一直伴随着iOS开发,从以前的单一尺寸屏幕,到现在的多尺寸屏幕,Apple一直致力于让开发人员尽可能少在这些事上耗费过多的精力,所以Apple在2012年推出了Auto Layout特性,2014年又推出了Adaptive Layout、Size Classes,2015年又推出了Stack View。这些无一不是我们开发者做适配的利器。今天...

aocaojia9711的博客 169

AutoLayout and Sizeclasses讲解

iOS8和iPhone6发布已经过去蛮久了,广大的果粉终于迎来了大屏iPhone,再也不用纠结为大屏买三星舍苹果了…但是对于iOS开发人员来说,迎来了和Android开发开发一样的问题—>各种屏幕的适配(是不是可以要求加工资的节奏).对于适配,网传各种有关Size Class的论点,前段时间太忙,一直没去研究,套用+总的话,苹果在适配方面提供的方法做的比安卓好太多了.自己实测之后,确实很方便...

weixin_30553065的博客 73

AutoLayout的起源、概念和基本知识

随着iOS的设备的尺寸的拓展、还有iphone 和 ipad 一个app的模式的流行、传统的fram 布局(即指定 x y width height)已经很难做到非常好的效果、所以关系形布局 Autolayout开始大展身手、受到越来越多开发者的青睐。Autolayout的目标和多种布局的比较目标苹果在官方的文档中,是这么形容autolayout的目标的“苹果设计autolayout主要是帮助开发者

njafei的博客 717

iPhone 6 / 6 Plus 设计·适配方案

from:http://www.xiaoketang.net/iphone-6-6-plus-设计·适配方案.html treelessing2014.10.29   关于iPhone6/6+适配问题一直有争议,今天小编专门为大家整理了相关的有效方案,希望对大伙儿有帮助!   移动app开发中多种设备尺寸适配问题,过去只属于Androi

码农、技术宅、为梦想奋斗的开发者 436
上一篇: iOS性能优化:Instruments使用实战
下一篇: 初探 iOS8 中的 Size Class(转载)
Micheal_Xiao
博客等级 码龄16年 9粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值