zoukankan      html  css  js  c++  java
  • 点击状态栏回到顶部两种实现

    1.局部设置

    scrollView有个属性scrollsToTop,默认值为YES. 所以默认情况下点击状态栏就可以回到顶部。但当一个控制器中有多个scrollView或其子类时,因为默认值都是YES,所以系统不知道要让哪个scrollView回到顶部。所以要让需要回到顶部的scrollView.scrollsToTop = YES,而其他的scrollView的设置成NO.

    2.全局设置

    新建一个window,windowLevel为alert的,背景色为clear,加一个手势,设置点击事件。

    注意,iOS9之后,每个window都要设置一个rootViewController

    一个范例:

     1 @implementation TopWindow
     2 
     3 static UIWindow *window_;
     4 
     5 + (void)initialize
     6 {
     7     window_ = [[UIWindow alloc] init];
     8     window_.backgroundColor = [UIColor clearColor];
     9     window_.frame = CGRectMake(0, 0, XMGScreenW, 20);
    10     window_.windowLevel = UIWindowLevelAlert;
    11     [window_ addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(windowClick)]];
    12     UIViewController *vc = [[UIViewController alloc]init];
    13     
    14     vc.view.backgroundColor = [UIColor clearColor];
    15     window_.rootViewController = vc;
    16 }
    17 
    18 + (void)show
    19 {
    20     window_.hidden = NO;
    21 }
    22 
    23 + (void)hide
    24 {
    25     window_.hidden = YES;
    26 }
    27 
    28 /**
    29  * 监听窗口点击
    30  */
    31 + (void)windowClick
    32 {
    33     UIWindow *window = [UIApplication sharedApplication].keyWindow;
    34     [self searchScrollViewInView:window];
    35 }
    36 
    37 + (void)searchScrollViewInView:(UIView *)superview
    38 {
    39     for (UIScrollView *subview in superview.subviews) {
    40         // 如果是scrollview, 滚动最顶部
    41         if ([subview isKindOfClass:[UIScrollView class]] && subview.isShowingOnKeyWindow) {
    42             CGPoint offset = subview.contentOffset;
    43             offset.y = - subview.contentInset.top;
    44             [subview setContentOffset:offset animated:YES];
    45         }
    46         
    47         // 继续查找子控件
    48         [self searchScrollViewInView:subview];
    49     }
    50 }
    51 @end


    //UIView的一个分类方法

    - (BOOL)isShowingOnKeyWindow

    
    

    {

    
    

        // 主窗口

        UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;

    // 以主窗口左上角为坐标原点, 计算self的矩形框
    CGRect newFrame = [keyWindow convertRect:self.frame fromView:self.superview];

     CGRect winBounds = keyWindow.bounds;
    
    

      // 主窗口的bounds 和 self的矩形框 是否有重叠

    
    

        BOOL intersects = CGRectIntersectsRect(newFrame, winBounds);

     return !self.isHidden && self.alpha > 0.01 && self.window == keyWindow && intersects;
    
    

    }

    
    
    
     
  • 相关阅读:
    react 中cookie的使用
    使用react-router-dom 来搭建react路由
    取消浏览器的自动缓存
    vue 的$nextTick方法,与$set()方法
    vue监听data以及prop中的参数变化
    iview树的修改某个节点,树刷新后自动展开你刚才展开的所有节点
    Linux vim常用命令
    Linux yum源配置
    博客园鼠标点击特效
    Linux 简介
  • 原文地址:https://www.cnblogs.com/yintingting/p/4558963.html
Copyright © 2011-2022 走看看