当前位置: 代码迷 >> Iphone >> 系统在某些情况下能自动调节UIScrollView的contentInset
  详细解决方案

系统在某些情况下能自动调节UIScrollView的contentInset

热度:297   发布时间:2016-04-25 05:20:53.0
系统在某些情况下会自动调节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