我关注了这个blog post这解释了如何实现自定义 UINavigationBar 具有增加的高度,例如,如果您想将导航栏中的其他 ui 元素放在其余栏内容下方,这些内容将在导航之间持续存在堆。在您始终希望它增加高度的情况下,此代码非常有效。
在我的应用程序中,我需要以默认高度启动导航栏,然后在用户执行给定操作后增加它,添加更多内容。与 iTunes Store 中的歌曲信息和控件非常相似:
因此,如果 BOOL 属性为 NO,我将进行一些检查以不重新定位任何内容。当我将其设置为 YES 时,我会调用 [self setNeedsDisplay],它将调用 layoutSubviews 以根据该 bool 值适本地定位所有内容。 sizeThatFits 也被调用,我返回正确的高度。
问题是,我无法在 initialize 中调用 [self setTransform:CGAffineTransformMakeTranslation(0, -(NavigationBarHeightIncrease))];。相反,我在调用它的同时将 bool 值更改为 YES。因此,我的所有元素都向上移动了该数量。但是,如果我不调用 setTransform,导航栏中的元素位于正确的位置,但导航栏本身的位置太靠下,因此我添加到栏中的自定义 View 显示在 View Controller 的 View 上方 - 它会溢出,我添加的额外空间是黑色,而不是导航栏的背景颜色。
如果我在 initialize 中调用 setTransform,当高度为默认高度时,元素会在不应该的时候向上移动。
那么,我怎样才能正确地动态更改 UINavigationBar 子类的高度和位置?
最佳答案
如评论中所建议的那样,要实现自定义导航栏(不是 native 控件的子类)在导航 Controller 中的 Controller 的推送和弹出之间持续存在的行为,您需要有一个带有自定义导航的 Controller 栏,然后是单个嵌入式 View ,该 View 解析为 UINavigationController,其 View Controller 位于下方。然后,还需要将导航 Controller 的委托(delegate)设置为根 Controller ,以便在插入和弹出子 Controller 时更新标题和其他属性。我在下面提供了这个 Storyboard版本的截图:
关于ios - 动态增加/减少自定义 UINavigationBar 的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31485825/
我正在尝试设置一个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
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>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
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在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返回它复制的字节数,但是当我还没有下
我使用Ember作为我的前端和GrapeAPI来为我的API提供服务。前端发送类似:{"service"=>{"name"=>"Name","duration"=>"30","user"=>nil,"organization"=>"org","category"=>nil,"description"=>"description","disabled"=>true,"color"=>nil,"availabilities"=>[{"day"=>"Saturday","enabled"=>false,"timeSlots"=>[{"startAt"=>"09:00AM","endAt"=>
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c