在公司上个版本的开发中遇到了一个UI布局的小问题:

某个页面需要增加一个分享按钮,但是该页面是二级页面,导航栏右边也已经放置了2个button。

起初和老大谈论这个问题的时候想到的方法是导航栏右边加三个button得了~但是一回想,这貌似太丑了!虽然两人都不是处女座,不过这个方法算是pass掉了

当天下班前想起浏览网页的时候经常会在滑动的时候右下方出现一个“回到顶部”的按钮,似乎在iOS客户端也可以实现这一类似的功能。

原理:获取到keywindow,然后在keywindow上面添加一个bgView,在bgView上面加上一个UIButton(之所以这样包装一层是为了美观一点,想将shareBtn弄成圆型)

    - (void)createShareBtn
{
    UIButton *shareBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    shareBtn.frame = CGRectMake(0, 0, 40, 40);
    [shareBtn setImage:[UIImage imageNamed:@"wright"] forState:UIControlStateNormal];
    [shareBtn addTarget:self action:@selector(shareBtnAction) forControlEvents:UIControlEventTouchUpInside];
   
    bgView = [[UIView alloc] initWithFrame:CGRectMake(kScreen_width-50, kScreen_height/2-64, 40, 40)];
    bgView.backgroundColor = [UIColor whiteColor];
    bgView.alpha = .9;
    bgView.layer.cornerRadius = 20;
    bgView.layer.masksToBounds = YES;
    [bgView addSubview:shareBtn];
    
    // 获取keyWindow
    UIWindow *keywindow = [UIApplication sharedApplication].keyWindow;
    [keywindow addSubview:bgView];
}
- (void)shareBtnAction
{
//创建分享视图
    [self shareView];
}

有一点需要注意:即如果我们这样设置了,那么需要进行下一步操作(在视图pop的时候,移除shareBtn),否则shareBtn会一直显示在keywindow上面

    - (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
// 这里bgView是全局的
    [bgView removeFromSuperview];
}

当然还有一点

细心的同学会发现我在bgView设置了alpha值为0.9,这样依然会遮挡住下面的视图,影响用户浏览

为此我做了如下设置:

1、值得说一下的是,整个二级页面的层级结构是

UIViewController-->webView

2、让我们来看看webView里有一些什么我们可以用到的:

@interface UIWebView : UIView <NSCoding, UIScrollViewDelegate> 
@property (nullable, nonatomic, assign) id <UIWebViewDelegate> delegate;
@property (nonatomic, readonly, strong) UIScrollView *scrollView NS_AVAILABLE_IOS(5_0);

对于UIScrollViewDelegate大家应该不陌生了

    #pragma mark - UIScrollViewDelegate
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    bgView.alpha = .45;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    bgView.alpha = .9;
}

当然一定不要忘了签约:webView.scrollView.delegate = self;

对于- (void)createShareBtn方法的调用随大家需求所定

1、如果需要长期显示,可以在- (void)viewDidLoad方法里调用(此处还有一个小技巧:createShareBtn在createWebView之后

在UIWindow上加类似于“回到顶部”的按钮的更多相关文章

  1. 简单地做一下“回到顶部”按钮,用jQuery实现其隐藏和显示

    1.首先,我们要准备HTML代码: <div id="return-top"> <a href="#top">返回顶部</a> ...

  2. 一款回到顶部的 jQuery 插件,支持 Div 中的滚动条回到顶部

    前言 今天在网上搜索“回到顶部”的 jQuery 插件,网上有很多,但是大部分都不支持让 Div 中的滚动条回到顶部.于是乎,不放弃,自己参考 Github 上的一个 jQuery 插件,经过自己的修 ...

  3. jq回到顶部效果分析

    在浏览网页时,超出屏幕高度就会出现提上点击回到顶部的图标,点击即可回到页面顶部. 用到的知识点如下: 1.首先控制图标的显示和隐藏,先要获取浏览器的高度. var wHeight = $(window ...

  4. jQuery滚动条回到顶部或指定位置

    jQuery滚动条回到顶部或指定位置 在很多网站,为了增强用户体验,我们会看到回到顶部的按钮,不用手动拖拽滚动条就能回到顶部,非常方便.下面就介绍用jquery实现的滚动到顶部的代码 $(functi ...

  5. 兼容IE,chrome 等所有浏览器 回到顶部代码

    今天在博客园看到一片帖子回到顶部代码,索性就看了下,但是发现在非IE浏览器下可以运行,在IE浏览器下却运行不了. 故将其代码搬弄过来做了些许修改后,完美支持了IE下的运行. 主要实现功能代码文件: & ...

  6. vue中回到顶部

    1. 回到顶部,使用 scrollIntoView 方法: Element.scrollIntoView方法滚动当前元素,进入浏览器的可见区域 该方法可以接受一个布尔值作为参数.如果为true,表示元 ...

  7. jQuery写toTop(回到顶部)效果

    在通常的网站开发中,页面有时候会很长,尤其是一些电商网站,为了提高用户的体验效果,我们通常会增加一个回到顶部的按钮,这个按钮我们同城会使用fixed定位,将其定位在当前可视区域某一固定位置.这个效果用 ...

  8. JavaScript实现网页回到顶部效果

    在浏览网页时,当我们浏览到网页底部,想要立刻回到网页顶部时,这时候一般网页会提供一个回到顶部的按钮来提升用户体验,以下代码实现了该功能 HTML代码: <p id="back-top& ...

  9. 从微信小程序到鸿蒙js开发【13】——list加载更多&回到顶部

    鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口] 目录: 1.list加载更多 2.list回到顶部 3.<从微信小程序到鸿蒙js开发>系列文章合集 1.list加 ...

随机推荐

  1. Qt获取控件位置,坐标总结

    总结的结果是: QMouseEvent中两类坐标系统,一类是窗口坐标,一类是显示器坐标.   总结一:经过试验,QMouseEvent::globalPos()  和 QCursor::pos()效果 ...

  2. linux整个日志目录查询记录

    在linux下面需要查看整个目录的日志,搜索用户的一个行为.因为不知道具体是那一天,一个个的查询也可以,但是太麻烦.可以用过下面的命令来实现: rep -iRl  "关键字" ./ ...

  3. js重名的处理

    ### 关于重名的处理 > 在变量提升阶段,如果名字重复了,不会重新的进行声明,但是会重新的进行定义(后面赋的值会把前面赋的值给替换掉) ```javascript //=>变量提升:fn ...

  4. js不管条件是否成立都要进行变量提升

    ### 不管条件是否成立都要进行变量提升 > 不管条件是否成立,判断体中出现的var/function都会进行变量提升:但是在最新浏览器版本当中,function声明的变量只能提前声明,不能定义 ...

  5. [翻译] ZLSwipeableView

    ZLSwipeableView A simple view for building card like interface like Tinder and Potluck. ZLSwipeableV ...

  6. [翻译] CHAnimation

    CHAnimation https://github.com/cyndibaby905/CHAnimation How it looks CHAnimation is a project used t ...

  7. 软件磁盘阵列 (Software RAID)

    什么是 RAID 磁盘阵列全名是『 Redundant Arrays of Inexpensive Disks, RAID 』,容错式廉价磁盘阵列. RAID 可以通过一些技术(软件或硬件),将多个较 ...

  8. Python实例---基于页面的后台管理[简单版]

    后台管理菜单 + 母板[css/content/js] 向后台提交数据[2种]:       1.  模态对话框(数据少操作,且Js复杂):        form表单 :优点:简单,前端提交后后台处 ...

  9. [EffectiveC++]item13:Use objects to manage resources(RAII)

    baidu百科 RAII 百科名片 RAII,也称为“资源获取就是初始化”,是c++等编程语言常用的管理资源.避免内存泄露的方法.它保证在任何情况下,使用对象时先构造对象,最后析构对象. 目录 RAI ...

  10. GPL & Apache License

    Copyleft[编辑] GPL不会授予许可证接受人无限的权利.再发行权的授予需要许可证接受人开放软件的源代码,及所有修改.且复制件.修改版本,都必须以GPL为许可证. 这些要求就是copyleft, ...