本文译自:8 Tips for working effectively with Interface Builder(需翻墙) 先来看看目录: 介绍 使view的Size与view中的Content相适应 按住option键—观察所选中view与另外view边缘之间的距离 Editor – Embed In View, Unembed: 在不影响subview的位置时
本文译自:8 Tips for working effectively with Interface Builder(需翻墙)
先来看看目录:
- 介绍
- 使view的Size与view中的Content相适应
- 按住option键—观察所选中view与另外view边缘之间的距离
- Editor –> Embed In View, Unembed:
- 在不影响subview的位置时给view自由的添加padding
- 对不在最前端的view进行移动
- IBOutletCollection排序
- 使用自定义属性
- 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(最常见的用法):
- Label/Button的size会被设置为与当前text内容相当的尺寸:
- parent container view会与其subviews的frames相适应。
2. 按住option键—观察所选中view与另外view边缘之间的距离
按住option键之后,选择一个view,然后将鼠标悬停在别的一些view上,会看到一些距离——选中view与别的view边缘之间的距离。
3. Editor –> Embed In View, Unembed:
你是不是对此素手无策呢:你希望将已有的一些subviews放入到不同的parent view中,甚至是不同的.xib文件中,但是当你把一些view重新设置之后,它们为自动的位于新的parent view中心?
现在好了,我们有一个解决办法,如下图所示:
4. 在不影响subview的位置时给view自由的添加padding
当试图给view添加padding时,默认情况下subview的x和y是不会改变的,但是有时候我们并不希望是这样的结果。我发现一个最好的方法,就是在按住?时拖动view的边缘:
5. 对不在最前端的view进行移动
刚开始我还以为要想移动不在最前端的view是不可行的。
有一种方法就是先将非最前端的view临时设置到最前端,移动好位置之后,在设置回去。
另外一种方法就是使用右边panel中的size inspector,不过有时候要想设置一个好的位置,需要不断的猜测和修正。
另外我发现一种方法:使用键盘上的上下左右键来移动view——这还不用把view设置为最前端:
- 在document outline中选中view
- 为了获得view的焦点:单击root view的frame
- 利用箭头进行移动
提醒: 获得view的焦点还有一个更好的方法:在document outline上双击view,就可以用箭头移动view了。
6. IBOutletCollection排序
有时候IBOutletCollection里面元素的顺序对我们来说非常重要:我们希望按某个顺序对其进行迭代。
有一种方法:在代码里面利用x/y/tag对其做排序处理,然后在迭代。
实际上,没必要这么做。IBOutletCollection的顺序取决于我们dragged connection的顺序,可以通过^+单击 File’s Owner来查看当前的顺序:
7. 使用自定义属性
可能这个功能是IB中很少被使用的:使用Identity inspector中的User Defined Runtime Attributes(用户自定义运行时属性)在view上设置自定义属性:
在此我定义了一个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中看到定制的字体。
打完收工!希望这些技巧对你能有所帮助。

如何通过PHP多线程提高数据库查询性能引言:随着互联网的迅猛发展,数据库查询性能成为了开发者面临的重要挑战之一。而PHP作为一种广泛使用的服务器端脚本语言,对于数据库查询也扮演着重要的角色。本文将探讨如何通过PHP多线程技术提高数据库查询性能,以满足高并发请求的需求。一、什么是多线程在讨论如何利用多线程提高数据库查询性能前,我们首先需要了解什么是多线程。通俗

随着Web开发技术的不断发展,开发人员也面临着越来越复杂的业务场景和需求。例如,高并发、大量请求处理、异步任务处理等问题都需要使用高性能的工具和技术来解决。在这种情况下,Swoole成为了一种越来越重要的解决方案。Swoole是一种基于PHP语言的高性能异步网络通信框架。它提供了一些非常有用的功能和特性,例如异步IO、协程、进程管理、定时器和异步客户端,使得

Swoole中如何高效使用协程?协程是一种轻量级的线程,可以在同一个进程内并发执行大量的任务。Swoole作为一个高性能的网络通信框架,对协程提供了支持。Swoole的协程不仅仅是简单的协程调度器,还提供了很多强大的功能,如协程池、协程原子操作,以及各种网络编程相关的协程封装等等,这些功能都可以帮助我们更高效地开发网络应用。在Swoole中使用协程有很多好处

Yii框架是一个开源的PHPWeb应用程序框架,提供了众多的工具和组件,简化了Web应用程序开发的流程,其中数据查询是其中一个重要的组件之一。在Yii框架中,我们可以使用类似SQL的语法来访问数据库,从而高效地查询和操作数据。Yii框架的查询构建器主要包括以下几种类型:ActiveRecord查询、QueryBuilder查询、命令查询和原始SQL查询

随着Web应用的广泛应用,越来越多的开发者开始寻求一种高效快捷的方式来构建他们的应用。近年来,ThinkPHP6作为一款优秀的PHP框架,逐渐成为了整个领域中的佼佼者。在本文中,我们将会介绍如何使用ThinkPHP6打造出高效的Web应用,让你轻松应对业务中的各种挑战。1.ThinkPHP6简介ThinkPHP6是一款轻量级的高性能PHP框架,它为开发者提

在PHP开发中,正则表达式是非常重要的工具,用于匹配、查找和替换文本中的特定字符串。然而,编写高效的正则表达式并不是一件易事,需要开发者具备一定的技巧和经验。下面是一些可以帮助您编写高效正则表达式的技巧:1.尽可能使用非贪婪匹配默认情况下,正则表达式是贪婪的,即它们将尽可能匹配更多的文本。在某些情况下,可能需要使用非贪婪匹配来避免这种情况。非贪婪匹配使用"

随着互联网的发展,数据已经成为企业和组织最重要的资产,而MySQL作为最流行的开源关系型数据库管理系统,为了有效提升开发效率及质量,各种需求被满足,MySQL经历了多年演化,成为企业常用的数据库之一。在日常工作中,使用MySAL频率较高,学会如何更好地使用MySQL将会对我们存储和管理数据起到非常重要的作用,从而提升我们的工作效率和工作质量,本文将

PHP8如何使用StringableInterface处理各种类型的字符串?PHP8引入了一个新的接口Stringable,该接口可以帮助开发者更方便地处理各种类型的字符串。在过去,我们通常使用is_string()函数来判断一个变量是否为字符串类型,然后再进行相应的操作。而现在,有了Stringable接口,我们可以更直观地处理字符串,而无需判断其类型。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 中国語版
中国語版、とても使いやすい

ホットトピック









