3

我的应用程序使用UINavigationController,并且最终视图(详细视图)允许您使用UIWebView在应用程序内查看外部网站。可滚动的UINavigationBar类似于移动Safari

我想在用户查看网页时释放一些额外的屏幕空间,并希望模拟iPhone上Safari的工作原理,当您查看时,顶部的URL栏向上滚动并离开屏幕UIWebView中的内容在折叠下面。

任何人都有如何实现这个想法?如果我设置navigationBarHidden属性并在顶部滚动我自己的自定义栏并在UIScrollView中设置它和UIWebView,那么在UIWebView中存在滚动问题,因为它与其他可滚动视图无法很好地协作。

+0

类似的问题:HTTP://计算器。com/questions/21929220/show-hide-uitoolbar-match-finger-movement-exactly-as-in-for-example-ios7-s这是非常微妙的做它它像safari .... – Fattie 2014-02-28 20:39:09

回答

0

不能给你一个直接的答案,但看看iWebKit。也许那提供了一个解决方案该演示至少包含一个“全屏”项目。

1

让UIWebView中的滚动事件有一个委托,当您最初开始滚动UIWebView时,让UIWebView的高度增加并同时减少Y位置,同时将导航栏沿Y方向向上移动。一旦导航栏完全移出视图,停止增加UIWebView的大小,并允许正常滚动发生。

这会让导航栏成为UIWebView的一部分,因为它会滚动屏幕。

此外,当您向相反方向滚动并且到达UIWebView内容的顶部时,您需要做相反的处理。

4

基于@布赖恩建议我做了这个代码:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    CGFloat height = navigationBar.frame.size.height; 
    CGFloat y = scrollView.bounds.origin.y; 
    if (y <= 0) { 
     CGRect frame = navigationBar.frame; 
     frame.origin.y = 0; 
     navigationBar.frame = frame; 
    } else if (tableView.contentSize.height > tableView.frame.size.height) { 
     CGFloat diff = height - y; 
     CGRect frame = navigationBar.frame; 
     frame.origin.y = -y; 
     navigationBar.frame = frame; 

     CGFloat origin = 0; 
     CGFloat h = height; // height of the tableHeaderView 
     if (diff > 0) { 
      origin = diff; 
      h = y; 
     } 
     frame = tableView.frame; 
     frame.origin.y = origin; 
     frame.size.height = tableView.superview.frame.size.height - origin; 
     tableView.frame = frame; 

     CGRect f = CGRectMake(0, 0, tableView.frame.size.width, h); 
     UILabel* label = [[UILabel alloc] initWithFrame:f]; 
     tableView.tableHeaderView = label; 
     [label release]; 
    } 
} 

我的代码有一个UITableView但应与任何滚动组件工作。如果除了navigationBar和UIScrollView子类之外还有其他组件,则应该更改可滚动组件高度的计算方式。这样的事情:

frame.size.height = tableView.superview.frame.size.height - origin - otherComponentsHeight; 

我需要添加一个愚蠢tableHeaderView具有所需的行为。问题是,当scrollViewDidScroll:被调用时,内容有偏移量,但移动Safari中的可见性是内容不会滚动,直到导航条完全消失。我首先尝试将contentOffset.y更改为0,但显然它不起作用,因为所有代码都依赖于滚动机制。所以我只是添加了一个tableHeaderView,它的高度恰好是滚动的偏移量,所以头部永远不会被看到,并且内容似乎不会滚动,直到导航条完全消失。

如果您不添加哑表tableHeaderView,则可滚动组件会显示在导航栏后面滚动。

enter image description here

随着tableHeaderView,所述滚动组件实际上是滚动(如图滚动条),但由于存在tableHeaderView其高度恰好比滚动偏离相同的,可滚动内容似乎不可以滚动,直到完全的导航栏消失:

enter image description here

+0

我想做的事情与UIWebview相同的效果?我怎样才能做到这一点?因为它没有标题视图,所以很难。现在我只是移动导航栏,并使网页视​​图框架相同,我没有剪辑子视图,所以我可以看到仍然和它得到的效果,但它不允许触摸!所以我不能在顶部滚动,我有些人可能会这样对我来说可能是一个问题。 – Maximilian 2012-10-06 20:24:44