系统在某些情况下会自动调节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

 

转载于:https://www.cnblogs.com/chao8888/p/5396749.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值