文章更新请移步到github.page浏览
#import "ViewController.h"
#define kCellId @"CellId"
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
@property (nonatomic, strong, readwrite) UITableView *tableView;
@property (nonatomic, strong, readwrite) NSMutableArray *dataArray;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
/*
知识点一:
导航栏或者是导航栏上的控件设置透明度是没有效果的
如果要达到透明的效果可以通过颜色设置,比如navigationBar
的背景图片BackgroundImage,或者导航栏上的标题
*/
self.tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self.tableView registerClass:UITableViewCell.class forCellReuseIdentifier:kCellId];
[self.view addSubview:self.tableView];
self.dataArray = [NSMutableArray array];
for (int i=0; i<30; i++) {
NSString *string = [NSString stringWithFormat:@"第%d行",i];
[self.dataArray addObject:string];
}
// UIView *blueView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 128)];
// blueView.backgroundColor = [UIColor blueColor];
// [self.view addSubview:blueView];
/*
知识点二:
以下的方法是设置UIScrollView及其子类,在滚动视图内容的时候自动偏移,不会被UINavigationBar和UITabBar遮盖
*/
// @available(iOS 11,*)
// 第一个参数是指iOS11以上的系统,
// 第二个是指任何平台
if (@available(iOS 11,*)) {
// iOS11 引入的“安全区域”的概念,废弃了iOS7之后出现的 topLayoutGuide/bottomLayoutGuide
// 常用的两个值
// UIScrollViewContentInsetAdjustmentAutomatic (默认值,设置ScrollView的显示区域范围在safeArea的范围内,不被stateBar、TabBar、NavigationBar遮盖)
// UIScrollViewContentInsetAdjustmentNever (设置ScrollView全屏展示,布局起点是屏幕的最左边)
// 其原理与iOS11的不一样,scrollView.contentInset的值不会变,而是设置了
// scrollView.ajustedContentInset的值(提供给用户的是只读属性)
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic;
// 另外用户还可以增加“安全区域”的范围
// 备注:设置的值是在原来得基础上设置的,不能减少
self.additionalSafeAreaInsets = UIEdgeInsetsMake(200, 0, 0, 0);
// 备注:contentInsett和additionalSafeAreaInsets 两个同时设置,作用不会重叠,是以设置最大的为准
// self.tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0);
}
else{
// 在iOS11.0系统之后,被弃用了
// 其原理是设置scrollView.contentInset,可以在viewDidAppear方法打印其值
self.automaticallyAdjustsScrollViewInsets = NO;
}
/**
extendedLayoutIncludesOpaqueBars 默认是NO(备注:对UIScrollView及其子类不起作用)
1、当为YES时,view的坐标原点是屏幕的最左上角开始的,与navigationBar的透明度Translucent无关
2、当为NO时
a> navigationBar.translucent = YES,view的布局起点是从屏幕的最左上角开始
b> navigationBar.translucent = NO,view的布局起点是从导航栏左下角开始
*/
self.extendedLayoutIncludesOpaqueBars = NO;
/**
常用两个值:
UIRectEdgeNone (对是有的UIView都有效,ScrollView及其子类都是从导航栏底部布局,优先级比较高,不受其他属性影响)
UIRectEdgeAll (默认值)全屏布局,但是会受多个属性影响,比如extendedLayoutIncludesOpaqueBars、navigationBar.translucent、scrllView的安全区域设置等
*/
self.edgesForExtendedLayout = UIRectEdgeAll;
/*
不会对ScrollView的布局产生影响,只会对其他的UIView产生影响
*/
[self.navigationController.navigationBar setTranslucent:YES];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.dataArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId forIndexPath:indexPath];
cell.textLabel.text = [self.dataArray objectAtIndex:indexPath.row];
cell.contentView.backgroundColor = [UIColor redColor];
return cell;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"navigationBar.translucent %d",self.navigationController.navigationBar.translucent);
NSLog(@"self.tableView.contentInset %@",NSStringFromUIEdgeInsets(self.tableView.contentInset));
NSLog(@"self.tableView.adjustedContentInset %@",NSStringFromUIEdgeInsets(self.tableView.adjustedContentInset));
}
网友评论