我正在使用 Swift 开发 iOS 应用程序。我创建的另一个应用程序是我用 Objective C 开发的,大约在 2014 年的这个时候发布。 Storyboard似乎让 UI 的东西同时变得更简单和更复杂,所以我试图找出当前的最佳实践观点发展。
此时,对于多种屏幕尺寸,尺寸类别和约束似乎几乎是必要的节省时间的方法。早在 2014 年,情况就不是这样了,以编程方式跟踪 UI 布局,因为 CGRect 代码使得以编程方式处理 UI 布局更简单,代码重用更好,而不是创建一个全新的 View Controller ,只需将新的 UI 元素添加到几乎相同的看法。用约束代码做同样的事情似乎不太吸引人,但如果我想在那里重用更多的代码,也是必要的。
所以我想知道当前的做法是什么,因为我只是在考虑代码重用。程序化约束似乎不如 Storyboard 定义的约束那么优雅,但我不确定它们是否会全部用于 UI 代码,因为它们似乎无法以编程方式动态更新 UI。
此时最好的策略是将所有内容都包含在保留 super View 的布局中并保持 Storyboard的大部分内容为中心,还是为这些布局快速编写编程代码是否仍然有意义,因为我必须针对 iPad 和 iPhone 进行特定更改反正?在这个问题上,将截然不同的 UI 分成多个 Storyboard(例如,2 个不同的 iPad 和 iPhone Storyboard,因为这在某一点上是默认的)是否仍然有意义?
在此先感谢您对此的回答。特定于设备的东西似乎并不总是代码重用,但我想我只是希望重用相对简单。否则,我只是在创建比我严格需要的更多的 swift 类。
最佳答案
这本质上是基于意见的。从没有 Interface Builder 到只有 StoryBoards 的所有内容都可能用于生产应用程序,您几乎可以使任何东西正常工作。
除了 TableView/CollectionView 单元格之外,我个人倾向于将 Storyboards 用于所有内容。我发现它从我的类中删除了几乎所有接口(interface)样板代码并使它成为这样,所以我只需要处理我的 ViewController 之间的接口(interface)。以下是我通常尝试和遵循的准则:(再次...意见)
大型 Storyboard变得难以维护,编辑时的性能受到明显影响。我们可以选择使用 StoryboardReferences,所以不妨使用它们。
这使事情更易于维护和重用。例如。可以在多个场景中使用的标题。不得不使用 containerVC 并在各处处理 segues 可能有点烦人,但我很少后悔将某些东西分离到它自己的 ViewController 中。
如果您想支持在 iPad(或任何 future 的设备)上调整大小,需要维护更多代码,并且将迫使您交换 ViewControllers in-out。更不用说 future 了,很明显 Apple 假设您使用的是尺寸类而不是交换 ViewController,并且显然是 Apple 平台开发的 future 方向
这极大地简化了您的代码,并且通常避免在 Storyboard 之外的任何地方处理大小类。复杂的动画并不总是可行的,但如果你愿意搞砸的话,你可以做很多令人惊讶的事情。它可以将切换操作缩小到 2 行代码,这非常好。使用 StackViews 对此也有很大帮助。
另一件需要关注的事情是尽可能多地避免 IB 的字符串类型特性。这在 Swift 中要容易得多,并且有一些使用字符串支持的枚举和扩展的不错的解决方案,但具体细节可能超出了这个问题的范围。
关于iOS 10 Swift 和定义 UI 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43792879/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano
这里有一个很好的答案解释了如何在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返回它复制的字节数,但是当我还没有下