3

我的应用程序使用 aUINavigationController并且最终视图(详细视图)允许您使用UIWebView.

当用户查看网页并想要模拟 iPhone 上的 Safari 的工作方式时,我想释放一些额外的屏幕空间,当您查看内容时,顶部的 URL 栏会向上滚动并离开UIWebView屏幕首屏以下。

有人对如何实现这一目标有想法吗?如果我设置navigationBarHidden属性并在顶部滚动我自己的自定义栏并将其设置UIWebView在 a 中,UIScrollView那么会出现滚动问题,UIWebView因为它不能很好地与其他可滚动视图配合使用。

4

3 回答 3

4

根据@Brian 的建议,我编写了以下代码:

- (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: 被调用时,内容有一个偏移量,但在 Mobile Safari 中的出现是在导航栏完全消失之前内容不会滚动。我首先尝试将contentOffset.y 更改为 0,但显然它不起作用,因为所有代码都依赖于滚动机制。所以我只是添加了一个tableHeaderView高度正好是滚动偏移量的,所以标题永远不会真正看到,并且内容似乎不会滚动,直到navigationBar完全消失。

如果您不添加哑 t ableHeaderView,则可滚动组件会出现在navigationBar.

在此处输入图像描述

使用tableHeaderView,可滚动组件实际上正在滚动(如 中所示scrollbar),但由于存在tableHeaderView高度与已滚动 完全相同的offset,因此可滚动内容似乎不会滚动,直到navigationBar完全消失:

在此处输入图像描述

于 2012-03-20T09:00:35.207 回答
1

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

当导航栏滚出屏幕时,这将产生一种错觉,即导航栏是 UIWebView 的一部分。

此外,当您向相反方向滚动并到达 UIWebView 内容的顶部时,您需要执行相反的操作。

于 2009-11-20T17:24:33.280 回答
0

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

于 2009-11-19T18:01:08.187 回答