2012-07-10 109 views
0

请原谅我的钝头衔,因为我不确定如何描述这个问题。iOS UIView滚动UI - 如何实现?

最近很多iOS应用程序都使用滚动UI设计模式,这有助于最大化屏幕空间,通常在用户向下滚动时隐藏标题。

例如,Instragram的主视图顶部有Instragram标题。在此视图上向上滚动可将标题固定在顶部,并且视图通常会恢复到内容的顶部。但向下滚动并将标题作为内容的一部分,为额外的44个垂直空间提供方便。

它可能是我在一段时间内没有做过多的iOS工作,但我无法轻易弄清楚如何最好地实现这一点?对可怕的描述抱歉。

+0

我们确实在我们的应用程序的一个类似的东西在那里,当你滚动表视图,它表扩大到几乎全屏幕,如果你在顶部不是(在顶部留下一定的空间,以收缩表如果需要的话)。当您滚动回顶端时,表格会缩小。如果我没有记错,我们在[UIView动画]中使用了一系列setFrame,抵消了每个元素的Y坐标。我还记得我们必须实现scrollViewDelegate方法并检查scrollView的contentOffset值。 – Zhang 2012-07-10 12:10:41

回答

1

我尝试过ranReloaded的回答,但似乎在UIScrollView上调用setFrame:可以在超出边界时停止弹跳视图。

相反,我设置滚动视图以适应另一个名为scrollerWrapper的UIView。将计算出的原点和高度应用于此视图会给我带来影响,我在加上后会保留反弹行为。

- (void)scrollViewDidScroll:(UIScrollView*) scrollView 
{ 
    CGPoint offset = scrollView.contentOffset; 

    CGRect headerFrame = header.frame; 
    CGRect wrapperFrame = scrollerWrapper.frame; 

    if(offset.y > 0){ 
     headerFrame.origin.y = -offset.y; 
     wrapperFrame.origin.y = MAX(0, headerFrame.size.height - offset.y); 
     } 
    else{ 
     headerFrame.origin.y = 0.0; 
     wrapperFrame.origin.y = headerFrame.size.height; 
     } 
    wrapperFrame.size.height = self.view.frame.size.height - wrapperFrame.origin.y; 

    [header setFrame:headerFrame]; 
    [scrollerWrapper setFrame:wrapperFrame]; 
} 
+0

我不明白为什么设置标题视图的框架会影响滚动视图;标题和滚动是独立的兄弟姐妹(不是父子) – 2012-07-10 17:08:38

+0

为什么你需要修改滚动视图的框架?也许我并没有完全理解你想要完成什么? – 2012-07-10 17:10:01

1

如果标题保持不动,请在滚动视图顶部使用单独的视图。 如果您使用UITableView,则可以使用节标题。

编辑使用此代码:

- (void)scrollViewDidScroll:(UIScrollView*) scrollView 
{ 
    CGPoint offset = scrollView.contentOffset; 

    CGRect headerFrame = _headerView.frame; 

    if(offset.y > 0){ 
     headerFrame.origin.y = offset.y; 
    } 
    else{ 
     headerFrame.origin.y = 0.0; 
    } 

    [_headerView setFrame:headerFrame]; 
} 

(假设_headerView是你的头,坐在滚动视图的顶部,而不是在它里面此外,这两个滚动视图和头开始在顶部的父视图,y == 0此外,您的视图控制器必须设置为滚动视图的代理

我刚刚从内存中写了这段代码;没有测试过,但最多只需要调整。

+0

就是这样;头部固定在向上滚动方向上,但可以向下移动。 – Graham 2012-07-10 12:02:12

+0

如果是这样的话,可以:1)使用带有一个部分和一个大单元格的表格视图(不是很优雅)或者2)根据UIScrollView委托方法中获得的当前滚动偏移量调整单独的标题视图(需要更多工作,但更好) – 2012-07-10 12:06:06

+0

我添加了代码的答案;一探究竟。 – 2012-07-10 12:14:11