zoukankan      html  css  js  c++  java
  • 系统在某些情况下会自动调节UIScrollView的contentInset

        出现情景

        如果一个控制器(ViewController)被导航控制器管理,并且该控制器的第一个子控件是UIScrollView,系统默认会调节UIScrollView的contentInset

      UIEdgeInsetsMake(64, 0, 0, 0) // 有导航栏

      UIEdgeInsetsMake(20, 0, 0, 0) // 没有导航栏

      如果上述情况中的导航控制器又被UITabBarController管理,那么

        UIEdgeInsetsMake(64, 0, 49, 0) // 导航控制器又被UITabBarController管理

      如何取消系统的默认这自动调节功能

      ViewController.automaticallyAdjustsScrollViewInsets = NO;

      代码验证 -->

    //
    //  ViewController.m
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
    @property (nonatomic, weak) UISwitch *customSwitch;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
        UISwitch *customSwitch = [[UISwitch alloc] init];
        [self.scrollView addSubview:customSwitch];
        self.customSwitch = customSwitch;
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            NSLog(@"%@",self.scrollView);
            NSLog(@"%@",NSStringFromUIEdgeInsets(self.scrollView.contentInset));
            NSLog(@"%@",NSStringFromCGRect(self.customSwitch.bounds));
        });
    
    }
    // 打印结果
    
    /*
     情况一 只有UInavigationController
     <UIScrollView: 0x7fbbd301fa00; frame = (0 0; 375 667); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7fbbd27246e0>; layer = <CALayer: 0x7fbbd25176a0>; contentOffset: {0, -64}; contentSize: {0, 0}>
     {64, 0, 0, 0}
     {{0, 0}, {51, 31}}
     */
    
    /*
     情况二 只有UInavigationController,但是隐藏了导航条
     <UIScrollView: 0x7f80cb024200; frame = (0 0; 375 667); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7f80c9563330>; layer = <CALayer: 0x7f80c955f090>; contentOffset: {0, -20}; contentSize: {0, 0}>
     {20, 0, 0, 0}
     {{0, 0}, {51, 31}}
    
     */
    /*
     
      情况三 既有UInavigationController,又有UITabBarController
     <UIScrollView: 0x7fe60903fa00; frame = (0 0; 375 667); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7fe608e3b100>; layer = <CALayer: 0x7fe608f06320>; contentOffset: {0, -64}; contentSize: {0, 0}>
     {64, 0, 49, 0}
     {{0, 0}, {51, 31}}
     */
    
    // 上面采用了延迟的方法(GCD中的方法)来打印,在viewDidLoad方法中打印的结果不是最终的结果,当然也可以采用下面的方法来打印
    
    - (void)viewDidLayoutSubviews {
    
    //    NSLog(@"%@",self.scrollView);
    //    NSLog(@"%@",NSStringFromUIEdgeInsets(self.scrollView.contentInset));
        
    }
    - (void)viewDidAppear:(BOOL)animated {
        
    //    NSLog(@"%@",self.scrollView);
    //    NSLog(@"%@",NSStringFromUIEdgeInsets(self.scrollView.contentInset));
        
    }
    
    @end
  • 相关阅读:
    【bootstrapV3】移动端和PC端的 滚动监听
    【TP3.2】TP3.2的 FIND_IN_SET()的用法
    【jquery】多日期选择插件easyui date
    【onethink1.0】HTML模板获取前台和后台当前登录用户名
    【apache】phpstudy中apache 隐藏入口文件index.php (解决no input file specified错误)
    【PHP+JS】uploadify3.2 和 Ueditor 修改上传文件 大小!!
    【原创+亲测可用】JS如何区分微信浏览器、QQ浏览器和QQ内置浏览器
    【JS】移动端 好用的分享插件 soshm.js
    【TP3.2.X】linux环境下TP3.2.X的各个目录权限
    【php+微擎】微擎学习相关帮助推荐
  • 原文地址:https://www.cnblogs.com/chao8888/p/5396749.html
Copyright © 2011-2022 走看看