向下滚动时隐藏 UiWebView 底部的工具栏

2024-03-06

我有以下代码,当底部工具栏不在网页视图顶部时,可以成功隐藏底部工具栏,如附图所示。 (以下)

我想做的是完全隐藏工具栏,然后展开网页视图以占用额外的空间(类似于 Safari 的做法)。任何帮助都会很棒!

- (void)viewDidLoad
{
    [super viewDidLoad];
    if (self.url != nil)
    {
        [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[StoreWebViewController checkAndPrependProtocolForUrl:self.url]]]];
        self.webView.delegate = self;
    }

    for (id subview in self.webView.subviews)
    {
        if ([[subview class] isSubclassOfClass: [UIScrollView class]])
        {
            UIScrollView * s = (UIScrollView*)subview;
            originalDelegate = s.delegate;
            s.delegate = self;
            break;
        }
    }
}


- (void)scrollViewDidScroll :(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.y == 0) //Show toolbar when at top
    {
        [self.toolbar setHidden:NO];
    }
    else
    {
        [self.toolbar setHidden:YES];
    }
    [originalDelegate scrollViewDidScroll: scrollView];
}

我在一个应用程序中使用文本区域做了这个,所以我认为用 webView 替换 textView 是一样的。

初始化方向和标志

@implementation YourViewController{
    BOOL tap;
    BOOL hideNav;
    BOOL mustShowNav;
}

@synthesize webView;

typedef enum ScrollDirection {
    ScrollDirectionNone,
    ScrollDirectionRight,
    ScrollDirectionLeft,
    ScrollDirectionUp,
    ScrollDirectionDown,
} ScrollDirection;

viewDidLoad

- (void)viewDidLoad 
{
    webView.delegate = self;
    hideNav = NO;
    mustShowNav = NO;

    UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(webViewTapped:)];
    gestureRecognizer.delegate = self;
    [self.webView addGestureRecognizer:gestureRecognizer];
}

卷轴

- (void)scrollViewDidScroll:(UIScrollView*)scrollView
{
    ScrollDirection scrollDirection;

    if (lastContentOffset.y < scrollView.contentOffset.y)
        scrollDirection = ScrollDirectionDown;
    else
        scrollDirection = ScrollDirectionUp;


    float endScrolling = scrollView.contentOffset.y + scrollView.frame.size.height;
    if (scrollDirection == ScrollDirectionDown && scrollView.contentOffset.y > 50 && !mustShowNav) {
        hideNav = YES;
        tap = 0;
    } else {
        hideNav = NO;
    }

    if (scrollDirection == ScrollDirectionUp && mustShowNav){
        hideNav = NO;
        mustShowNav = NO;
    }

    if (scrollDirection == ScrollDirectionDown && endScrolling > scrollView.contentSize.height - 50 && !mustShowNav) {
        mustShowNav = YES;
    }

    [[self navigationController] setToolbarHidden:hideNav animated:YES];
    lastContentOffset = scrollView.contentOffset;

    [originalDelegate scrollViewDidScroll: scrollView];
}

点击手势

- (void)webViewTapped:(id)sender
{
    if(!tap){
        hideNav = NO;
        tap = 1;
    } else {
        hideNav = YES;
        tap = 0;
    }
    [[self navigationController] setToolbarHidden:hideNav animated:YES];
}

希望这对您有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

向下滚动时隐藏 UiWebView 底部的工具栏 的相关文章

随机推荐

  • 鼠标悬停时突出显示两个列表中的项目

    我有两个 ul lists Item 1 A5 Item 2 A4 Item 3 A2 Item 4 A1 Item 5 A3 当我将鼠标悬停在任何位置时 我应该从哪里开始编写代码 li 在任一列表中 它将突出显示第一个列表中的项目和第二个
  • IBOutlet 为零

    我已经为视图创建了一个标准出口 该视图将根据上一屏幕上选择的按钮保存不同的信息 IBOutlet weak var labelView UIView 它显示它在故事板视图和代码本身中都是连接的 但是 每次我到达对 labelView 的任何
  • L2CAP通道数据传输

    我正在致力于使用面向连接的通道开发 BLE 应用程序 我使用 Nordic Semiconductor nrf52 作为外围设备 使用 iPhone 6 作为中央管理器 我使用了蓝牙 SIG 提供的预定义 PSM 值 即 0x0025 我能
  • 将 Firebase 添加到库中时出现“No such module 'Firebase'”

    我刚刚创建了新框架并通过 CocoaPods 添加了 Firebase 当合并库时它成功了 但是当我也通过 CocoaPods 将该库添加到其他项目 然后合并该项目时 它会引发错误 No such module Firebase 有人遇到过
  • JQuery 访问动态创建的对象

    如何访问动态生成的对象 div 我的意思是 DIVS 不存在于输出中 document ready function 开始了 If I do click me click function container append div can
  • 仅获取屏幕上范围的范围坐标

    我目前正在使用以下方法来查找a的坐标Range在文档中 private Rectangle GetRangeCoordinates Window w Range r int left 0 int top 0 int width 0 int
  • DateTime ParseExact 字符串未被识别为 DateTime C#

    我正在尝试将字符串解析为 DateTime 但出现错误 这是我的代码 return DateTime ParseExact 01 01 0001 12 00 00 AM dd MM yyyy HH mm ss tt CultureInfo
  • 在 Android 中使用 Socialauth 集成 Linkedin 时出现问题

    一年前 我使用社交身份验证在我的 Android 应用程序中实现了 linkedin 集成 直到几天前它都运行良好 现在它给出以下错误 org brickred socialauth exception SocialAuthConfigur
  • “<>”的 SQL 运算符名称是什么?

    我一头雾水 谷歌没找到 谁能告诉我什么是Sql lt gt 运营商名称 lt gt 不等于 它等于
  • 同时标记多个字符串

    假设我有三个 C 风格的字符串 char buf 1 1024 char buf 2 1024 and char buf 3 1024 我想对它们进行标记 并使用所有三个标记中的第一个标记执行操作 然后对所有三个标记中的第二个标记执行相同的
  • 最终静态变量与非最终静态变量?

    有谁知道这两种方法的区别 public class SingleTone private static final instance new SingleTone private SingleTone public static Singl
  • 在同一 POST 中上传图像和其他数据

    我想使用 POST 方法上传图像 我可以单独上传图片 但我想将它们与我需要发送的其他数据一起发布到服务器 任何人都可以帮我吗 知道如何发帖 这是我发送数据的代码 除此之外 我还需要发送图像 postString NSString strin
  • “不在”的 Lambda 表达式?

    我有一个detailcollection每个细节都有的集合 code price name 和一个带有一些代码的字符串 string codes 1 2 3 我知道我可以使用得到一个数组string Split string codesar
  • 将事件处理程序附加到 DOM 元素

    我正在开发一款井字棋游戏 该游戏即将完成 我唯一想知道的是是否可以添加一个事件处理程序onclick从我的 js 文件中调用它 而不是直接从 HTML 属性中调用它 这是使用以下内容的 HTML 部分onclick div div div
  • 将现有的云端硬盘文件复制到 appdata 文件夹中

    我正在尝试使用新的应用数据 https developers google com drive appdata我希望创建用户选择的模板文件的副本 而不是像示例代码所示创建新文件 我的模板文件是保存在特定云端硬盘帐户中的 Google 可编辑
  • 是否可以直接将仿射变换矩阵应用于 Mayavi ImageActor 对象?

    我在用着Mayavi渲染一些由 3D 体积内的多个 2D 平面组成的成像数据 其位置 方向和比例由 4x4 刚体仿射变换矩阵定义 每架飞机包括 二维图像数据数组 我使用它来显示mayavi mlab imshow 由我绘制的线和点组成的一组
  • nhibernate - 禁用一对多关系的子记录的自动\延迟加载

    我想知道是否有一种方法可以禁用 nHibernate 中子记录的自动加载 对于一个 多个关系 我们可以轻松地关闭属性上的延迟加载 但我想要的是禁用任何类型的自动加载 延迟加载和非延迟加载 我只想通过查询加载数据 即 HQL 或 Criter
  • 如果值 =< 使用 jquery 或 PHP 的特定数字,我可以使表格单元格具有不同的背景颜色吗?

    我有一个包含很多数字的 HTML 表格 如果该单元格 或列 内的值等于或小于特定数字 是否可以让表格单元格更改背景颜色 例如 如果单元格 有没有办法让这个在现实中发挥作用 Erik 这是如何使用 JS Jquery 执行此操作的示例 You
  • Node.js puppeteer - 如何设置导航超时?

    我正在使用 node js 和 puppeteer 来获取一些数据 我打开的一些文件非常大 然后我收到错误 Error our error TimeoutError Navigation Timeout Exceeded 30000ms e
  • 向下滚动时隐藏 UiWebView 底部的工具栏

    我有以下代码 当底部工具栏不在网页视图顶部时 可以成功隐藏底部工具栏 如附图所示 以下 我想做的是完全隐藏工具栏 然后展开网页视图以占用额外的空间 类似于 Safari 的做法 任何帮助都会很棒 void viewDidLoad super