你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS技巧綜合 >> 系統在某些情況下會自動調節UIScrollView的contentInset

系統在某些情況下會自動調節UIScrollView的contentInset

編輯:IOS技巧綜合
[摘要]本文是對系統在某些情況下會自動調節UIScrollView的contentInset的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。

出現情景

如果一個控制器(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
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved