所以我有点不好意思问这个问题,因为它看起来很简陋,但是自从开始 iOS 开发(大约一年的 self /互联网教学)以来,当不使用 Storyboard时,我严重依赖帧大小并使用自动布局非常谨慎。在 Objective C 中,我发现自己处于需要更频繁地使用自动布局的情况,但是使用 Swift 我可以为框架的 x 和 y 原点、它的中心等设置动画……我从来没有遇到过我无法完成我的工作的情况只需要帧大小和像素位置,我已经完成了一些相当复杂的 View 工作。我的问题是,使用自动布局而不是框架大小和像素位置有什么好处?我不想因为无知和习惯而错过一些很棒的性能优势。非常感谢!
最佳答案
长话短说 了解如何使用自动布局 - 它可以为实际应用节省大量时间!
长答案:
最后,是否要使用 Apple 提供的自动布局或尺寸类等功能取决于您。这些的主要好处是在最终产品的 UI 渲染方面不是真正性能。如果您计划开发一款适用于不同屏幕尺寸和方向的应用,现在是您需要考虑所有边缘情况的时候了。
假设您想完成支持 iPhone 4/4s 屏幕尺寸、iPhone 5/5s 屏幕尺寸、iPhone 6/6s (Plus) 屏幕尺寸和 iPad 屏幕尺寸以及纵向和横向模式所需的所有工作对于以上所有屏幕尺寸(here 是一个很好的概述):好吧,这没什么问题,就去做吧。当然,您随后需要非常仔细地进行测试,并始终保持此列表为最新——在每个应用程序中,您都在使用自己的解决方案。如果那适合你,那就去做吧。
但大多数人都希望表达自己的想法,而不用纠结于不同屏幕尺寸等问题。您当然可以从一个应用程序中提取您自己的逻辑以在您的所有应用程序中使用它,而这正是自动布局和屏幕尺寸的意义所在。 简而言之,Apple 已完成所有工作,让您的框架设置适用于您的不同屏幕。您只需要使用他们的新词汇表(约束)即可使其发挥作用。
换句话说:它是一个在直接处理屏幕渲染逻辑之上的抽象层。如果你不喜欢它,就放手吧。但是,如果您打算开发一些可以在不同代 iPhone/iPad 上运行的重要应用程序,并且还计划维护这些应用程序,那么,请学习如何使用自动布局和尺寸类 .它将为您和所有 future 的维护者节省大量的开发时间。
一个好的起点是 docs .或者像 this one 这样的教程在 raywenderlich.com 上。
Apple 自己就这个困难说了以下内容(在上面链接的文档中):
In many ways, programmatically defining a view’s frame provides the most flexibility and power. When a change occurs, you can literally make any change you want. Yet because you must also manage all the changes yourself, laying out a simple user interface requires a considerable amount of effort to design, debug, and maintain. Creating a truly adaptive user interface increases the difficulty by an order of magnitude.
顺便说一句: 在编程语言方面使用自动布局或框架没有任何区别:Swift 和 Objective-C 都很好地支持这两种方式。看来您还没有找到如何在 Obj-C 中更改框架。 ;)
还有一件事: 您也不需要使用 Storyboard 来使用自动布局。您可以从代码中使用自动布局。请参阅文档 here .甚至有很多框架试图使这更容易(Apple 的原始 API 在许多方面往往不是很漂亮),我可以推荐 SnapKit .
关于ios - 自动布局与框架尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33850196/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
是否可以为特定(或所有)项目使用多个布局?例如,我有几个项目,我想对其应用两种不同的布局。一个是绿色的,一个是蓝色的(但是)。我想将它们编译到我的输出目录中的两个不同文件夹中(例如v1和v2)。我一直在玩弄规则和编译block,但我不知道这是怎么回事。因为,每个项目在编译过程中只编译一次,我不能告诉nanoc第一次用layout1编译,第二次用layout2编译。我试过这样的东西,但它导致输出文件损坏。compile'*'doifitem.binary?#don’tfilterbinaryitemselsefilter:erblayout'layout1'layout'layout2'
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上