出現情景 如果一個控制器(ViewController)被導航控制器管理,並且該控制器的第一個子控制項是UIScrollView,系統預設會調節UIScrollView的contentInset UIEdgeInsetsMake(64, 0, 0, 0) // 有導航欄 UIEdgeInsetsMak ...
出現情景
如果一個控制器(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