我已经阅读了很多关于 iOS7 UI 转换的文章。
automaticallyAdjustsScrollViewInsets、extendedLayoutIncludesOpaqueBars、edgesForExtendedLayout这三个属性我无法获取到什么??
例如,我试图让我的 View Controller 在状态栏下方开始,但我无法实现。
最佳答案
从 iOS7 开始, View Controller 默认使用全屏布局。同时,您可以更好地控制 View 的布局方式,这可以通过这些属性完成:
edgesForExtendedLayout
基本上,您可以使用此属性设置 View 的哪些边可以扩展以覆盖整个屏幕。想象一下,您将 UIViewController 推送到 UINavigationController 中。当该 View Controller 的 View 布局时,它将从导航栏结束的位置开始,但此属性将设置 View 的哪些边(上、左、下、右)可以扩展以填满整个屏幕。
用一个例子来看看:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
这里没有设置 edgesForExtendedLayout 的值,因此采用默认值 (UIRectEdgeAll),因此 View 扩展其布局以填满整个屏幕。
这是结果:
如您所见,红色背景延伸到导航栏和状态栏的后面。
现在,您要将该值设置为 UIRectEdgeNone,因此您要告诉 View Controller 不要扩展 View 以覆盖屏幕:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
结果:
自动调整ScrollViewInsets
当您的 View 是 UIScrollView 或类似 View 时使用此属性,例如 UITableView。您希望表格从导航栏结束的位置开始,因为如果没有,您将看不到全部内容,但同时您希望表格在滚动时覆盖整个屏幕。在这种情况下,将 edgesForExtendedLayout 设置为 None 将不起作用,因为您的表格将开始滚动到导航栏结束的位置,并且不会移到它后面。
这里是这个属性派上用场的地方,如果你让 View Controller 自动调整 insets(将此属性设置为 YES,也是默认值)它会将 insets 添加到 table 的顶部,因此 table 将启动导航栏结束的地方,但滚动会覆盖整个屏幕。
这是设置为NO的时候:
是(默认情况下):
在这两种情况下,表格都在导航栏后面滚动,但在第二种情况下(是),它将从导航栏下方开始。
extendedLayoutIncludesOpaqueBars
此值只是对先前值的补充。默认情况下,此参数设置为 NO。如果状态栏是不透明的,即使您将 View 扩展到覆盖状态栏, View 也不会扩展到包含状态栏(edgesForExtendedLayout 到 UIRectEdgeAll)。
如果您将该值设置为 YES,这将允许 View 再次进入状态栏下方。
如果有不清楚的地方,写评论,我会回答的。
iOS 如何知道要使用哪个 UIScrollView?
iOS 抓取 ViewController View 中的第一个 subview ,即索引 0 处的 subview ,如果它是 UIScrollView 的子类,则将解释的属性应用于它。
当然,这意味着 UITableViewController 默认工作(因为 UITableView 是第一个 View )。
关于ios - 解释 iOS7 中自动调整 ScrollView 插入、扩展布局包含不透明条、边缘ForExtendedLayout 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18798792/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我收到这个错误: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返回它复制的字节数,但是当我还没有下
我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示: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'
我想这样组织C源代码:+/||___+ext||||___+native_extension||||___+lib||||||___(Sourcefilesarekeptinhere-maycontainsub-folders)||||___native_extension.c||___native_extension.h||___extconf.rb||___+lib||||___(Rubysourcecode)||___Rakefile我无法使此设置与mkmf一起正常工作。native_extension/lib中的文件(包含在native_extension.c中)将被完全忽略。
我们目前正在为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使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里