提高Interface Builder高效工作的8个技巧

摘要:
介绍如何根据视图中的内容调整视图的大小。按住选项键可观察选定视图与另一视图边缘之间的距离。编辑器->当子视图的位置不受影响时,可以向视图中自由添加填充。移动不在前端的视图。使用自定义属性MoarFonts--font-customization对IBOutletCollection进行排序:

转自“破船之家”的翻译文章,真的很不错的技巧,在此转发分享给大家。转自这里

提高Interface Builder高效工作的8个技巧第1张

本文译自:8 Tips for working effectively with Interface Builder(需FQ)

先来看看目录:

  1. 介绍
  2. 使view的Size与view中的Content相适应 
  3. 按住option键—观察所选中view与另外view边缘之间的距离
  4. Editor -> Embed In View, Unembed:
  5. 在不影响subview的位置时给view自由的添加padding
  6. 对不在最前端的view进行移动
  7. IBOutletCollection排序
  8. 使用自定义属性
  9. MoarFonts——字体定制:所见即所得

介绍

在JoyTunes工作期间,我们在开发最新一版的钢琴应用程序,对程序的UI做了大量的重新设计,因而也在Interface Builder上花费了许多时间,对于图片和view的缩放操作,非常的让人不省心。不过在开发过程中,我们发现了许多非常不错的IB使用技巧,我寻思着这必须要跟大家分享,所以成就了这篇文章。

免责声明:
在JoyTune工作期间,我们使用的是.xib文件(不是storyboards),并且没有使用Auto Layout。实际上这主要是历史原因导致的。所以,这里介绍的一些技巧可能稍微有点不同(如果你使用storyboard或Auto Layout),不过大多数都是一样的。

1. 使view的Size与view中的Content相适应

很惭愧的是最近才发现这个功能——能节约大量时间。
选中任意的一个view,然后Editor->Size to Fit Content,或者简单的按 ⌘=
接着就会按照下面的规则对选中view的Size做出与之Content对应的适应。

  • ImageView/Button的size会设置为图像的原始size(最常见的用法):

提高Interface Builder高效工作的8个技巧第2张

  • Label/Button的size会被设置为与当前text内容相当的尺寸:

提高Interface Builder高效工作的8个技巧第3张

  • parent container view会与其subviews的frames相适应。

提高Interface Builder高效工作的8个技巧第4张

2. 按住option键—观察所选中view与另外view边缘之间的距离

按住option键之后,选择一个view,然后将鼠标悬停在别的一些view上,会看到一些距离——选中view与别的view边缘之间的距离。

提高Interface Builder高效工作的8个技巧第5张

3. Editor -> Embed In View, Unembed:

你是不是对此素手无策呢:你希望将已有的一些subviews放入到不同的parent view中,甚至是不同的.xib文件中,但是当你把一些view重新设置之后,它们为自动的位于新的parent view中心?

现在好了,我们有一个解决办法,如下图所示:

提高Interface Builder高效工作的8个技巧第6张

4. 在不影响subview的位置时给view自由的添加padding

当试图给view添加padding时,默认情况下subview的x和y是不会改变的,但是有时候我们并不希望是这样的结果。我发现一个最好的方法,就是在按住⌘时拖动view的边缘:

提高Interface Builder高效工作的8个技巧第7张

5. 对不在最前端的view进行移动

刚开始我还以为要想移动不在最前端的view是不可行的。

有一种方法就是先将非最前端的view临时设置到最前端,移动好位置之后,在设置回去。

另外一种方法就是使用右边panel中的size inspector,不过有时候要想设置一个好的位置,需要不断的猜测和修正。

另外我发现一种方法:使用键盘上的上下左右键来移动view——这还不用把view设置为最前端:

  • 在document outline中选中view
  • 为了获得view的焦点:单击root view的frame
  • 利用箭头进行移动

提高Interface Builder高效工作的8个技巧第8张

提醒:
获得view的焦点还有一个更好的方法:在document outline上双击view,就可以用箭头移动view了。

6. IBOutletCollection排序

有时候IBOutletCollection里面元素的顺序对我们来说非常重要:我们希望按某个顺序对其进行迭代。

有一种方法:在代码里面利用x/y/tag对其做排序处理,然后在迭代。

实际上,没必要这么做。IBOutletCollection的顺序取决于我们dragged connection的顺序,可以通过^+单击 File’s Owner来查看当前的顺序:

提高Interface Builder高效工作的8个技巧第9张

7. 使用自定义属性

可能这个功能是IB中很少被使用的:使用Identity inspector中的User Defined Runtime Attributes(用户自定义运行时属性)在view上设置自定义属性:

提高Interface Builder高效工作的8个技巧第10张

在此我定义了一个JTLabel类,我们可以设置它的stroke color和width,这样一来我们就不用在代码里面设置相关属性了。

利用这个功能很好的一例子就是Canvas,通过它不用写一行代码就能定义相关的动画。

8. MoarFonts——字体定制:所见即所得

在Interface Builder中字体的定制是个非常麻烦的事情。IB并没有内置该功能,我用过比较好的解决办法就是使用自定义属性——就像Canvas一样,或者使用字体替换技术——例如IBCustomFonts。这些都是有效的方案,不过他们有一个致命的缺点——它们不能给我们一种WYSIWYG(所见即所得)的体验,当然,这也是为什么我们会第一时间使用Interface Builder的原因。

为了知道给label设置的自定义字体是否合适,我们必须要运行程序才能知道结果——这有点让人不能接受。

最近我发现了一个新的解决办法:使用MoarFonts。卖价10美元,没有demo,没有试用——不过请相信,这非常值得购买!它的使用方法非常简单:将MoarFonts当做script build phase,然后build app,接着重启Xcode,就可在Interface Builder中看到定制的字体。

打完收工!希望这些技巧对你能有所帮助。

免责声明:文章转载自《提高Interface Builder高效工作的8个技巧》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【Unity3D】魔鬼与牧师游戏记录——MVC架构Arduino通过L9110进行电机控制下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

DataGridView很详细的用法(转载)

一、DataGridView 取得或者修改当前单元格的内容: 当前单元格指的是 DataGridView 焦点所在的单元格,它可以通过 DataGridView 对象的 CurrentCell 属性取得。如果当前单元格不存在的时候,返回Nothing(C#是null) // 取得当前单元格内容 Console.WriteLine(DataGridView1...

静态代理和动态代理的区别

什么是静态代理: 打一个最简单的比方,我现在想要学习,那么就必须得把书包拿过来,把书掏出来,准备好纸笔,然后开始学习,等学完了我还得收拾书,把书塞回书包里,还得整理一下书包,这是一个完整的学习的过程,但是我很懒,不想动弹,只想学习,那可能就得让妈妈帮我把书包拿过来,把书打开,我只管学习就好了,学完以后,妈妈再帮我把书整理好放回去.(我这是打个什么破比方.....

解决cocos2dx在VS2012中文版环境下不支持中文的问题

  首先要明确的一点是:cocos2dx是支持中文的。因为其编码格式为UTF-8(无签名)——这只是我在网上找到的结论,并非从官方获取,因此不能十分确定,不过应该无误。   那么,为什么在VS2012环境下,cocos2dx不能正确显示中文呢?   这是因为二者编码格式不一致。VS2012中文版的默认编码格式为GB2312-80(我不确定英文版的格式如何,...

iOS UIBezierPath简单实用

 转载请注明出处!!! 1.介绍       UIBezierPath这个类在UIKit中, 是Core Graphics框架关于path的一个封装,使用此类可以定义简单的形状,比如我们常用到,矩形,圆形,椭圆,弧,或者不规则的多边形      每一个直线段或者曲线段的结束的地方是下一个的开始的地方。每一个连接的直线或者曲线段的集合成为subpath。一...

Unity3D面试题总结

一.什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作。 渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。 主要步骤有: 本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化。 二.如何优化内存? 有很多种方式,例如 1.压缩自带类库; 2.将...

LoadRunner系列之—-01 接口压力测试脚本

 LoadRunner中一般用如下函数进行接口测试: <一>. http或soap协议下的get请求接口,样例如下: web_url("integrated_query.jsp", "URL=http://{UrlAddress}/pcis/policy/query/integrated_query.jsp?CASOPDPT=00&...