我正在尝试产生同样的效果,就像 instagram 在他们的标题中所做的那样。我该怎么做?
我尝试了很多解决方案。
最佳 - https://github.com/andreamazz/AMScrollingNavbar
但它有一个大问题 - 它使用 uipangesturerecognizer 移动条。这对我不利,因为如果表格位于顶部,我想显示栏。
我试图将此控件的工作更改为 ScrollView 委托(delegate),但发现它有很多问题,您有什么想法,他们是如何做到的?
最佳答案
我找到了解决方案,就像您说的那样 - 您必须稍微弄乱 ScrollView 委托(delegate),但大约 2 小时后我就弄清楚了。我试图解决的问题是能够像您在 Instagram 中那样以一个连续的 Action 获得标题。
因此,首先检查 xib 设置,它在 (0 20, 320 85) 处有一个标题 View ,就在 (0 20, 320 548) 处的 TableView 后面
下面是启动后的样子(黄色的表格 View 框架):
这是我希望它在下拉后的样子(红色的标题框):
所以我只粘贴带有注释的代码,我希望它足够容易理解。
定义
#define SIGNIFICANT_SCROLLING_DISTANCE 200
创建两个属性
@property (nonatomic) CGFloat lastScrollViewOffsetY;
@property (nonatomic) CGFloat distancePulledDownwards;
然后为 scrollViewDidScroll 委托(delegate)方法添加以下实现
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// store current scroll view frame as we will change it later on and set it
// back to the scroll view in the very end
CGRect currentScrollViewRect = scrollView.frame;
// same with the content offset
CGPoint currentScrollViewOffset = scrollView.contentOffset;
CGFloat offsetShiftY = self.lastScrollViewOffsetY - scrollView.contentOffset.y;
if (offsetShiftY > 0) {
// pulling downwards
// keep trrack of the distance that we pulled downwards
self.distancePulledDownwards += offsetShiftY;
// header opens (table view shifts its frame down) in two cases:
// 1. contentOffset.y<0
// 2. scrolled downwards a significant amount or header is already open
// but in both cases we have to make sure that it doesn't open further than we want it to
CGFloat wantedOriginY = currentScrollViewRect.origin.y;
if ((scrollView.contentOffset.y<0) || (self.distancePulledDownwards > SIGNIFICANT_SCROLLING_DISTANCE) || (currentScrollViewRect.origin.y>20)){
// shift scroll views frame by offset shift
wantedOriginY = currentScrollViewRect.origin.y + offsetShiftY;
// compensate that shift by moving content offset back
currentScrollViewOffset.y += (wantedOriginY <= 105) ? offsetShiftY : 0;
}
currentScrollViewRect.origin.y = (wantedOriginY <= 105) ? wantedOriginY : 105;
}
else {
// pulling upwards
self.distancePulledDownwards = 0;
// header closes (table view shifts its frame up) in one case: when it is open =) (and contentOffset.y>0 to eliminate closing on bounce)
if (scrollView.contentOffset.y > 0) {
CGFloat wantedOriginY = currentScrollViewRect.origin.y + offsetShiftY;
currentScrollViewRect.origin.y = (wantedOriginY >= 20) ? wantedOriginY : 20;
currentScrollViewOffset.y += (wantedOriginY >= 20) ? offsetShiftY : 0;
}
}
// set the changed (if it was changed at all) frame to the scroll view
[scrollView setFrame:currentScrollViewRect];
// correct offset using a special trick
// it ensures that scrollViewDidScroll: won't be called on setting the offset
scrollView.delegate = nil;
[scrollView setContentOffset:currentScrollViewOffset];
scrollView.delegate = self;
// and finally remember the current offset as the last
self.lastScrollViewOffsetY = scrollView.contentOffset.y;
}
并享受在屏幕上来回滚动的流畅表格 =) 这也可以修改,您可以添加标题并调整标题的大小,使其与 Instagram 的标题基本相同。
关于ios - 类似 Instagram 的导航栏 (iOS 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20273289/
这里有一个很好的答案解释了如何在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”结果的
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
Ruby是否有逐步调试器,类似于Perl的“perl-d”? 最佳答案 ruby-debug(对于ruby1.8),debugger(对于ruby1.9),byebug(对于ruby2.0)以及trepanning系列都有一个-x或--trace选项。在调试器内部,命令setlinetrace将打开或关闭线路跟踪。这是themanualforruby-debug原来的答案已经修改,因为数据噪声文章的链接,唉,不再有效了。还添加了ruby-debug的后继者 关于ruby-Ruby
假设您在Ruby中执行此操作:ar=[1,2]x,y=ar然后,x==1和y==2。是否有一种方法可以在我自己的类中定义,从而产生相同的效果?例如rb=AllYourCode.newx,y=rb到目前为止,对于这样的赋值,我所能做的就是使x==rb和y=nil。Python有这样一个特性:>>>classFoo:...def__iter__(self):...returniter([1,2])...>>>x,y=Foo()>>>x1>>>y2 最佳答案 是的。定义#to_ary。这将使您的对象被视为要分配的数组。irb>o=Obje
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上
我使用Jekyll运行博客,并认为我会解决RedcarpetMarkdown解释器,因为它是developedandusedbyGitHub.好吧,我只是碰巧遇到了一个错误,去检查问题,然后foundthis.Maintainersays,"Asyouprobablyhavenoticed(harharharhar)Idon'thavetimetomaintainRedcarpetanymore.It'snotapriorityforme(IfindMarkdownthoroughlyboring)andit'snotapriorityforGitHub,becausewenolong
关于如何使用git设置类似Dropbox的服务,您有什么建议吗?您认为git是解决此问题的合适工具吗?我在考虑使用git+rush解决方案,你觉得怎么样? 最佳答案 检查这个开源项目:https://github.com/hbons/SparkleShare来自项目的自述文件:Howdoesitwork?SparkleSharecreatesaspecialfolderonyourcomputer.Youcanaddremotelyhostedfolders(or"projects")tothisfolder.Theseprojec
我在Ruby中遇到了一个有趣的表达式:a||="new"表示如果没有定义a,则将"new"值赋给a;否则,a将保持原样。在进行一些数据库查询时很有用。如果设置了该值,我不想触发另一个数据库查询。所以我在Python中尝试了类似的思路:a=aifaisnotNoneelse"new"失败了。我认为这是因为如果未定义a,则无法在Python中执行“a=a”。所以我能得出的解决方案是检查locals()和globals(),或者使用try...except表达式:myVar=myVarif'myVar'inlocals()and'myVar'inglobals()else"new"或try:
多年来,Perl一直是我首选的编程语言工具之一。Perl6语法看起来像是一个很棒的语言特性。我想知道是否有人开始为Ruby做这样的事情。 最佳答案 如果您想在Ruby中使用实际的Perl6语法,最好的选择是Cardinal,Parrot上的ruby编译器。它目前尚未完成并且非常缓慢,但我非常希望它最终成为一个可行的ruby实现。它目前大部分处于非事件状态,等待Parrot中的一些基础架构更改以支持改进的解析速度和其他功能。 关于regex-Ruby是否有类似于Perl6语法的插件