<commit_before>//
//  YPTabBarController.h
//  YPTabBarController
//
//  Created by 喻平 on 15/8/11.
//  Copyright (c) 2015年 YPTabBarController. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "YPTabBar.h"
#import "YPTabItem.h"
#import "UIViewController+YPTabBarController.h"

@interface YPTabBarController : UIViewController <YPTabBarDelegate>

@property (nonatomic, strong, readonly) YPTabBar *tabBar;

@property (nonatomic, copy) NSArray <UIViewController *> *viewControllers;

/**
 *  内容视图的Frame
 */
@property (nonatomic, assign) CGRect contentViewFrame;

/**
 *  第一次显示时，默认被选中的ViewController的Index，在viewWillAppear方法被调用前设置有效
 */
@property (nonatomic, assign) NSUInteger defaultSelectedControllerIndex;

/**
 *  设置被选中的ViewController的Index，界面会自动切换
 */
@property (nonatomic, assign) NSUInteger selectedControllerIndex;

/**
 *  此属性仅在内容视图支持滑动时有效，它控制child view controller调用viewDidLoad方法的时机
 *  1. 值为YES时，拖动内容视图，一旦拖动到该child view controller所在的位置，立即加载其view
 *  2. 值为NO时，拖动内容视图，拖动到该child view controller所在的位置，不会立即其view，而是要等到手势结束，scrollView停止滚动后，再加载其view
 *  3. 默认值为NO
 */
@property (nonatomic, assign) BOOL loadViewOfChildContollerWhileAppear;

/**
 *  鉴于有些项目集成了左侧或者右侧侧边栏，当内容视图支持滑动切换时，不能实现在第一页向右滑动和最后一页向左滑动呼出侧边栏的功能，
 *  此2个属性则可以拦截第一页向右滑动和最后一页向左滑动的手势，实现呼出侧边栏的功能
 */
@property (nonatomic, assign) BOOL interceptRightSlideGuetureInFirstPage;
@property (nonatomic, assign) BOOL interceptLeftSlideGuetureInLastPage;

/**
 *  设置tabBar和contentView的frame，
 *  默认是tabBar在底部，contentView填充其余空间
 *  如果设置了headerView，此方法不生效
 */
- (void)setTabBarFrame:(CGRect)tabBarFrame contentViewFrame:(CGRect)contentViewFrame;


/**
 *  设置HeaderView
 *  @param headerView
 *  @param needStretch 内容视图向下滚动时，headerView是否拉伸
 *  @param headerHeight headerView的默认高度
 *  @param tabBarHeight tabBar的高度
 *  @param contentViewHeight 内容视图的高度
 *  @param tabBarStopOnTopHeight 当内容视图向上滚动时，TabBar停止移动的位置
 */
- (void)setHeaderView:(UIView *)headerView
          needStretch:(BOOL)needStretch<commit_msg>demo适配 iPhone X<commit_after>//
//  YPTabBarController.h
//  YPTabBarController
//
//  Created by 喻平 on 15/8/11.
//  Copyright (c) 2015年 YPTabBarController. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "YPTabBar.h"
#import "YPTabItem.h"
#import "UIViewController+YPTabBarController.h"

@interface YPTabBarController : UIViewController <YPTabBarDelegate>

@property (nonatomic, strong, readonly) YPTabBar *tabBar;

@property (nonatomic, copy) NSArray <UIViewController *> *viewControllers;

/**
 *  内容视图的Frame
 */
@property (nonatomic, assign) CGRect contentViewFrame;

/**
 *  第一次显示时，默认被选中的ViewController的Index，在viewWillAppear方法被调用前设置有效
 */
@property (nonatomic, assign) NSUInteger defaultSelectedControllerIndex;

/**
 *  设置被选中的ViewController的Index，界面会自动切换
 */
@property (nonatomic, assign) NSUInteger selectedControllerIndex;

/**
 *  此属性仅在内容视图支持滑动时有效，它控制child view controller调用viewDidLoad方法的时机
 *  1. 值为YES时，拖动内容视图，一旦拖动到该child view controller所在的位置，立即加载其view
 *  2. 值为NO时，拖动内容视图，拖动到该child view controller所在的位置，不会立即其view，而是要等到手势结束，scrollView停止滚动后，再加载其view
 *  3. 默认值为NO
 */
@property (nonatomic, assign) BOOL loadViewOfChildContollerWhileAppear;

/**
 *  鉴于有些项目集成了左侧或者右侧侧边栏，当内容视图支持滑动切换时，不能实现在第一页向右滑动和最后一页向左滑动呼出侧边栏的功能，
 *  此2个属性则可以拦截第一页向右滑动和最后一页向左滑动的手势，实现呼出侧边栏的功能
 */
@property (nonatomic, assign) BOOL interceptRightSlideGuetureInFirstPage;
@property (nonatomic, assign) BOOL interceptLeftSlideGuetureInLastPage;

/**
 *  设置tabBar和contentView的frame，
 *  默认是tabBar在底部，contentView填充其余空间
 *  如果设置了headerView，此方法不生效
 */
- (void)setTabBarFrame:(CGRect)tabBarFrame contentViewFrame:(CGRect)contentViewFrame;


/**
 *  设置HeaderView
 *  @param needStretch 内容视图向下滚动时，headerView是否拉伸
 *  @param headerHeight headerView的默认高度
 *  @param tabBarHeight tabBar的高度
 *  @param contentViewHeight 内容视图的高度
 *  @param tabBarStopOnTopHeight 当内容视图向上滚动时，TabBar停止移动的位置
 */
- (void)setHeaderView:(UIView *)headerView
          needStretch:(BOOL)needStretch
{'fraction_non_alphanumeric': 0.10097385955920041, 'fraction_numerical': 0.006663249615581753, 'mean_word_length': 6.254646840148699, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6269339', 'n_tokens_mistral': 1782, 'n_tokens_neox': 1892, 'n_words': 225}