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
  • 相关阅读:
    java四种线程池类型以及可选择的阻塞队列
    复习-java向上转型
    synchronized 加在方法和代码块底层实现区别
    synchronized 和 lock 的区别
    hashmap-put方法过程
    mybatis-防止sql注入
    synchronized-粗略过程
    消息队列-观察者模式和发布订阅模式区别
    复习-进程的调度算法
    Chocolatey
  • 原文地址:https://www.cnblogs.com/chao8888/p/5396749.html
Copyright © 2011-2022 走看看