1.纯代码开发,创建window并且设置显示
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
2.根据不同的设备类型设置不同的根控制器 (添加的控制器变为代码自定义的控制器类)
3.设置iPad的SplitVc
1> splitVc在显示之前,必须设置主视图控制器,可以不设置明细视图控制器
2> 添加到splitVc上 splitVc也可以使用addChildViewController的方式来添加主视图&明细视图控制器,但是注意只有splitVc的第一个子控制器才会被设置为主视图控制器,只有第二个子控制器才会被设置为明细视图控制器
[self addChildViewController:masterVc];
代码重构-容器视图
1.代码实现容器视图 容器视图的使用场景: 内嵌视图控制器
2.具体处理:
1>添加容器内容对应的控制器为子控制器 如果不添加内容对应的控制器,则会导致响应者链条中断
[self addChildViewController:tabBarVc];
2> 添加内容对应的视图为子视图 使内容可以显示在界面上
[self.view addSubview:tabBarVc.view];
3> 进行属性赋值 非必须,目的使用containerView属性来控制器容器视图的显隐
self.containerView = tabBarVc.view;
添加TabbarVc的子控制器
1.封装自定义方法添加导航栏控制器+子控制器
[self addChildViewController:nav];
2.设置属性
设置属性
controller.title = title;
controller.tabBarItem.image = [UIImage imageNamed:imgName];
//拼接选中图片名
NSString *selImgName = [NSString stringWithFormat:@"%@_click", imgName];
//设置渲染模式
controller.tabBarItem.selectedImage = [[UIImage imageNamed:selImgName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
//设置item的选中颜色 设置文字颜色
self.tabBar.tintColor = [UIColor darkGrayColor];
添加加号按钮
1.创建属性 懒加载
2.自定义方法设置具体处理
1> 设置图片
[self.composeBtn setImage:[UIImage imageNamed:@"tabbar_btn"] forState:UIControlStateNormal];
//设置填充模式
self.composeBtn.imageView.contentMode = UIViewContentModeScaleAspectFit;
2> 设置位置
//获取tabBar的尺寸
CGRect rect = self.tabBar.bounds;
//计算item的宽度 = tabBar的宽度 / 子控制器的数量
CGFloat itemW = rect.size.width / self.viewControllers.count;
//设置加号按钮位置 CGRectInset用来进行尺寸缩放,对称缩放
//CGRectInset(原始尺寸, x轴缩小的尺寸, y轴缩小的尺寸)
self.composeBtn.frame = CGRectInset(rect, 2 * itemW, 0);
3> 在viewDidAppear方法中添加加号按钮
//当视图已经显示后调用 (此处添加加号按钮就不会被系统占位Item遮挡)
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
//设置加号按钮
[self prepareComposeBtn];
}
加号按钮的分屏适配
1.错误: 分屏时加号按钮位置错误
2.原因:
应用一启动,就创建tabBarVc,并且将其添加到主视图控制器中,就立即设置加号按钮的尺寸,此时尺寸=未分屏的主视图宽度
3.解决办法:
在tabBar尺寸正确时(tabbar在分屏时,tabBarVc的子视图将会进行重新布局,会调用控制器的viewWillLayoutSubviews),设置加号按钮的尺寸
//当视图将要进行重新布局时调用(如子视图的尺寸发生变化时)
- (void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
//设置加号按钮
[self prepareComposeBtn];
}
iPad主界面-主视图
#pragma mark 1. 撰写区搭建
1.创建属性 懒加载
2.设置自定义方法 设置撰写区视图
1> 设置位置
[self.composeView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view.mas_left);
make.right.equalTo(self.view.mas_right);
make.bottom.equalTo(self.view.mas_bottom);
make.height.mas_equalTo(90);
}];
2> 添加子视图
NSArray *composeData = @[
@{@"title":@"说说"},
@{@"title":@"照片"},
@{@"title":@"日志"}];
for (NSDictionary *data in composeData) {
UIButton *btn = [[UIButton alloc] init];
[btn setTitle:data[@"title"] forState:UIControlStateNormal];
//stackView添加子视图使用addArrangedSubview
[self.composeView addArrangedSubview:btn];
}
3> 设置stackView的布局 按钮排列方向上相等
self.composeView.distribution = UIStackViewDistributionFillEqually;
菜单区搭建
1.前期工作同撰写区
2.设置btn的高度 //stackView如果外部没有挤压,会跟据其子视图的布局情况设置其自身的尺寸
[btn mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(60);
}];
3.设置stackView的布局 竖向排列
self.menuView.axis = UILayoutConstraintAxisVertical;
菜单区横竖屏适配-调整stack布局
1.根据横竖屏情况设置stackView中子视图布局
1> 在splitVc的监听横竖屏情况的响应方法中调用主视图控制器中控制子视图布局的方法
2> 根据横竖屏情况设置不同的布局
if (protrait) { //竖屏
//设置排列方向
self.composeView.axis = UILayoutConstraintAxisVertical;
//调整撰写区高度
[self.composeView mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(3 * 60);
//设置底部间距
make.bottom.equalTo(self.view.mas_bottom).offset(-30);
}];
} else { //横屏
self.composeView.axis = UILayoutConstraintAxisHorizontal;
//调整撰写区高度
[self.composeView mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(90);
//设置底部间距
make.bottom.equalTo(self.view.mas_bottom);
}];
}