Autolayout使用详细介绍 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 技术分享 >

Autolayout使用详细介绍

发表时间:2020-10-19

发布人:葵宇科技

浏览次数:95

关于Autolayout的初步介绍


说道Autolayout,我也是在iPhone 6 And 6+ 出来之后才开端存眷的。我是一个纯代码法度榜样者之前。
那个时刻有据说到Xib和Storyboard(如今Xib已经应用的少了,下面直接说storyboard。其实Xib和storyboard只是父子的关系嘛),我开端在网上查找材料,网上给的解释我总结给大年夜家如下:
1.代码是storyboard的进级。就是说,代码比storyboard牛逼啦。这种说法是如许来的:很多IOS开辟者,都是在Xib的引导下走向了这条不归路的。在他们应用Xib的时刻,他们开端入行,而后,开端大年夜范围的接触代码构造UI,大年夜而逐渐成为大年夜牛了。其实我们心里肯定都有这种感到嘛,用代码写才是法度榜样员嘛,在那构图似乎本身没有工作一样。  
2.storyboard比代码编写更轻松。这是因为,很多代码可以完成的工作,我们用storyboard真的可以很快的完成,并且storyboard的视图构造(等等对象)可以让我们加倍清楚地知道我们的界面长成什么样了。用代码,So慢啦。然则如不雅

我是大年夜代码到storyboard两种方法混淆应用。就在两个月前,我一向都没有应用storyboard(一句呵呵,其实不是不应用,是不会!本人一向都是代码,没有应用过xib).后来,也就是后来,万恶的苹不雅,搞出来6 和 6+ 这两个玩意,呵呵,不可了,当时认为代码适配那是多么麻烦的工作啊(如今两个混用,发明,其实用纯代码也可以很便利的完成适配的),SO,我开端进修storyboard的应用。当然,这也是我写这个博客的原因,因为,我进修storyboard,却Google不到合适的文┞仿。不是英文我看不懂就是转载转载,看来看去照样那几个,实袈溱找不到本身想要的(大年夜家可以尝尝哦)。

故事版(storyboard)


关于故事版的应用网上照样有很多材料可以找到的。这里不做具体介绍。根本介绍如下:
如不雅您对IOS开辟代码熟悉却对storyboard不熟悉,那就是说你和别人走的不一样的路。IOS开辟入门的规律来说,你一开端是进修xib的UI构造,然后你才开端应用UIView,UIViewController如许的代码构造。
[img]http://img.blog.csdn.net/20150105142203025?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/1.png在storyboard中,你可以拖拽UIImage,UIButton,UIView等等,用segue你就可以进行界面的跳转等。就是说,除了复杂的操作我们须要代码(如复杂动画等),其他的,我们大年夜都是可以用视图进行拖拽来完成的。具体应用故事版欲望大年夜家可以Google。这里不再介绍。

Autolayout介绍


这是我们的进修重点(IOS8有两个两点,一个是主动构造,一个是SizeClass,SizeClass此文末尾会有简单介绍,具体介绍见今后博客)。是的,在6 和 6+出来后,我们须要主动构造,当然,我们可以应用代码进行设备断定或者frame.size.width等方法进行构造,下面会说到。在ios6苹不雅团队就已经放出了autolayout的应用版本,如今应用它,已经比较成熟了的技巧。
在故事版中,我们可以应用Autolayout,也可以不实用AutoLayout.不应用的时刻,我们就是在“绝对构造”,应用的时刻,我们就是在“主动构造”。下面和大年夜家介绍这两个名称。 如不雅大年夜家对html比较熟悉的话,那么可能会应用到css中对div进行构造的办法。那边应用的很多也就是主动构造。我们可以如许想想,全世界有各种各样的浏览器,而网页的代码弗成能对不合尺寸的浏览器都要做一个适配对纰谬。所以呢,html中就应用css的相对距朗攀来计算响应div的距离或者宽度。下图是div中表里间距:
[img]http://img.blog.csdn.net/20150105142207968?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/2.png
而主动构造中,我们应用的不再是如下的代码:
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 1)]; view.backgroundColor = [UIColor clearColor]; [self.view addSubview:view];
[img]http://img.blog.csdn.net/20150105142254068?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
相干故事版中的实现如图: [img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/3.png我们应用绝对定位了这个红色view的地位和大年夜小为(10,100,100,100) 膳绫擎的代码和故事版中,我们把一个试图精确的定位在了一个地位。这种方法叫做“绝对构造”。autolayout中我们应用的“相对构造”,即相对某一个view的间距是若干。如下图:
[img]http://img.blog.csdn.net/20150105142256625?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/4.png这里我们可以看图片右边都黑色View的英文描述,Leading Space :125就是父View左边距125px。Top Space 49就是红色view上边距49px。Equal Height 15px就是说黑色view与红色view等高差了15px,还有一个就是肯定本身的高度为82px,我们经由过程4个相对距离切实其实定了黑色view的地位。大年夜家可以看到,这琅绫腔有应用到代码,我们肯定了一个view的地位。应用的就是相对构造。在故事版的autolayout中,任何一个视图,都有很多的相对构造的对像,如我们可以已父view为对像进行构造,也可以依一个按钮UIButton等等,只如果view,都可以作为你应用相对构造的对像。一般来说,我们肯定一个view的地位应用相对构造,我们须要肯定的就是宽度,高度,x距离,y舅鏊殁四个参数,而我们下面的进修甚至今后的应用,大年夜部分都是环绕这四个参数进行下去的。

Autolayout的初步应用


应用Autolayout,我们起首来熟悉一下故事版中对autolayout支撑的界面按钮。
起首回到项目标开端,我们须要打开项目标autolayout支撑。  
[img]http://img.blog.csdn.net/20150105142354830?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/5.png
如图,“Use Auto Layout”的沟沟我们选上。下面的“Use Size Classes”就是ios8琅绫擎的另一个神器,末尾会有剪短介绍。
我们右键将一个view拉到另一个view膳绫擎,就可以看到如下的视图:
[img]http://img.blog.csdn.net/20150105142339937?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/6.png
上图中,我们右键黑色view不放,拉到红色view膳绫擎,就出现了膳绫擎的选择框。
这里是一个重点,我和大年夜家具体的解释每个选项的意思:
1.Horizontal Spacing:阁下距离,就是本view和红色view的阁下程度距离
2.Vertical Spacing:高低距离,就是本view和红色view的高低垂直距离
3.Top:上边距,就是两个view的上边距的距离差
4.Center Y:垂直中点:就是和红色view的Y轴偏向的中点
5.Bottom:下边距,就是两个view的下边距的距离差
6.Left:左边距,就是两个view的左边距的距离差
7.Center X:程度中点:就是和红色view的X轴偏向的中点
8. Right:又边距,就是两个view的又边距的距离差
9.Equal Widths:表示两个view等宽
10.Equal Heights:表示两个view等高

这个就是主动构造的初始介绍!是不是感到很冲动,相对距离本就是依附如许的左边距,右边距的差值决定的。我们管这个器械叫做“束缚”。是的,每个束缚就是一个对view地位切实其实定。我们应用定义多个束缚,就可以肯定一个view的具体高度、宽度、左边距、右边距等。(束缚弗成以少,少了view地位不肯定,束缚也弗成以多,多了会报错,因为地位混乱了嘛)

束缚


当我们应用束缚的时刻,是不克不及够多也不克不及够少的。多了就地位混乱了,少了又不克不及肯定view的地位。如下图:
[img]http://img.blog.csdn.net/20150105142405890?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/7.png
当我们的束缚过少的时刻,会出现膳绫擎的右上方的红色警告。我们点击进去可以看到具体解释:
[img]http://img.blog.csdn.net/20150105142448245?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/8.png
这里就具体说了出现警告的原因。因为束缚太少或者束缚太多,都邑出现膳绫擎的警告。所以这个时刻,就要查看本身的束缚是不是有问题拉(一开端会发明找到响应的束缚须要时光,比较闇练应用过后,会发明,根本膳绫腔有太大年夜的问题在添加束缚的时刻)
如不雅我们的束缚添加正常的话,我们的view看起来会是如许:
[img]http://img.blog.csdn.net/20150105142513189?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/9.png
你会看到绿色。是的,如不雅束缚添加正常的话,那么会正常看到绿色的。 如不雅束缚已经添加好,那么我们的view就已经有一个地位在故事版中了,闭上膳绫擎的图,红色和黑色已经在一个地位膳绫擎了。如不雅这个时刻我们移动了view,如下图:
[img]http://img.blog.csdn.net/20150105142527557?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/10.png
我们就会看到,有黄色的线条,这个就是故事版给我们的提示,说view的如今地位和预期地位有了更改,还会把更改的数值给我们。
[img]http://img.blog.csdn.net/20150105142817160?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
这个时刻我们就可以如许的操作来清除黄色: [img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/11.png 我们可以在试图区域的右下角看到四个按钮,个中第三个打开就是膳绫擎的效不雅。我们可以点击第一个Update Frames,这个时刻我们的view就会按照已经写好的束缚进行从新排版。当然如不雅我们发明地位更悛改后的界面效不雅更好,那么我们就可以点击第二个选项Update Constraints。我们在字面意思就可以看到,就是刷新“束缚”,如许就可以让束缚根据当前的UI构造进行响应的数值更改了。

常用的按钮


我们可以经由过程鼠标右键对view进行束缚的添加,也可以在这里添加束缚:
[img]http://img.blog.csdn.net/20150105142850872?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/12.png
我们点击下面四个按钮中的第一个就可以了。这里我们留意一,须要选择至少两个view哦,不然相对对象找哪个啊!点击下面的Add X Constraints就可以添加上束缚了。
当然,我们也可以只选择一个view,就可以添加束缚,个中另一个相对对象是xcode本身断定的,就是在膳绫擎的四个按钮中的第二个。这个不常应用,就不介绍了。比较切实其实不消嘛。我添加束缚就是用鼠标右键拉动的,很快,其他的都不须要的。

束缚级别


这个有一个须要提一下,可能大年夜家在应用Autolayout的时刻不会碰到,然则万一碰到了呢?就是束缚其实也是有级其余。如许说,如不雅你是C,A让你做这件事,B让你做那件事,你该若何是好?这就和束缚一个,如不雅有两个不合的对象却功能雷同的束缚加载在一个view膳绫擎,这个view该若何显示呢?其实一般来嗣魅如许就已经报错了,报错就是如许的操作是缺点的嘛。然则有一些特别的情况,我就碰到过(具体大年夜家可能会碰到,这里就不说了),是必须加两个也有可能更多的雷同功能的束缚,这个时刻如不雅束缚有一个优先级,那么编译器不就知道该加载哪个束缚了嘛!我们看这里:
[img]http://img.blog.csdn.net/20150105142920496?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/13.png 我们点一一个添加了束缚的view,然后在右侧可以点击Edit按钮看到膳绫擎的画面。大年夜家留意到Priority这个参数哦,这个就是优先级。默认都是1000.如不雅你那边相对宽度并且,有不合的束缚,可以改变┞封个值,用800,900,1000如许的不合优先级来表示。(开端不懂Autolayout,为了本身想要的实现,最后发清楚明了这个功能。如今可以不消这个优先级的,下面会说到代码:) )

初步总结


经由过程膳绫擎的初步介绍和解释,大年夜家可能已经懂得到了What is AutoLayout。是的, 在AutoLayout中,没有了我们之前说的Frame的概念,相反,带来的是相对地位。本身的高度可以经由过程相对地位来肯定,也可以经由过程指定一个特定的值来肯定。并且,我们的相对地位可所以屏幕膳绫擎的任何元素,如高低阁下屏幕边距及高低中心线或阁下中心线等,也可所以我们自定义的一个view。这个view有了本身的地位之后,也可以当做其他view的供给相对地位的对像。
膳绫擎只是初步的应用。具体的应用也比较多,这里不写了,不然不知道要写若干呢。不过这里不写不代表你就不会应用了。其实你只要简单的操作一个红色蓝色绿色的view,然后变更不合的地位多操作几回,你就发明,已经对Autolayout有了很大年夜的应用了。这里在说一个,你在这个过程中会发明Autolayout的不足,就是不足够表达你或者你那残暴的设计师所设计出来的页面效不雅。这个时刻,就打开辟页回头持续看下面的文┞仿的了......

深处


我们都知道,在计算机的世界里,我们操作的都是01010101...外表也就是我们写的代码。那么我们刚才应用的Autolayout是不是就只是界面拖动元素那么简单呢?肯定不是的。 Autolayout后面也是代码。如不雅大年夜家应用过Git等代码治理对象,会发明多人合作Autolayout会掉足。git可是代码治理对象,怎么会对Autolayout产生掉足的提示呢?因为Autolayout也是代码,他的后台实现也是代码。
这个时刻,我知道了一个VFL的说话。就是很揪心的说话,就喝下面如许:
  NSDictionary *metrics = @{@"first":@(first), @"second":@(second), @"third":@(third), @"forth":@(forth)};
    NSString *vfl = @"|-0-[_labRiqi(first)]-1-[_labPingjun(second)]-1-[_labCankao(third)]-1-[_labResult]-0-|";
    NSString *vfl2 = @"V:|-0-[_labRiqi(_labPingjun,_labCankao,_labResult)]-0-|";
    [_cellView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vfl options:0 metrics:metrics views:dict1]];
    [_cellView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vfl2 options:0 metrics:metrics views:dict1]];

vfl说话就和膳绫擎的┞封样,半逝世不活的。应用VFL和界面膳绫擎添加束缚是一样的效不雅,就是复杂有一些,大年夜家可以谷歌。然则我用了良久,原因很简单的了,如不雅应用Autolayout那么的构造,完成不了设计师大年夜神设计的界面。可是我又想用,我认为不消构造仅仅应用相对地位是网页端的专利,没有想到手机端Native app也可以应用到。所以我用的就是膳绫擎的VFL说话的代码进行相对构造。
当然了,大年夜家对于膳绫擎的VFL说话,到GOOGLE膳绫擎查看一下就行了。因为我有更好的器械送给你们,不要在用这看到就认为是外星人般的VFL了。
额外解释一下:本来想重点解释这个的,然则因为大年夜家可能今后都不消VFL了,就剪短的说一下了。我们在故事版琅绫擎放置的view等,用Autolayout添加束缚和用代码添加束缚是不克不及够共存的。就是说,如不雅已经在故事版中添加束缚,那么就不要想着经由过程IBOutlet后在经由过程代码修改束缚的了。我试过,花了很长时光,没有成功。我不知道是不是可以走得通,然则我没有走通,网上也是在找不到相干的材料。

Masonry神器的到来


这里写的文字起码。Masonry是一个Github膳绫擎托管的项目。这里纰谬Masonry进话旧绍(我们已经习惯了代码而不是故事版的UI,这个类库可以帮我们应用少量代码完成束缚的添加),如不雅今后心境好会在今后的博客琅绫擎进行解释。大年夜家快去Github膳绫擎查看吧...
此文后面会根据不合情况有更新。如不雅转载,请加上泉源链接哦:),不克不及因为几处没有的更新而误害了他人啊......
本文用的markdown语法。真欲望CSDN可以支撑Markdown,如今的编辑框太丑了,一点也不好用。这些年没有变更,真不知道什么竽暌孤气保持到如今!

相关案例查看更多