1.純代碼開發,建立window而且設置顯示佈局
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];spa
2.根據不一樣的設備類型設置不一樣的根控制器 (添加的控制器變爲代碼自定義的控制器類).net
3.設置iPad的SplitVc日誌
1> splitVc在顯示以前,必須設置主視圖控制器,能夠不設置明細視圖控制器orm
2> 添加到splitVc上 splitVc也能夠使用addChildViewController的方式來添加主視圖&明細視圖控制器,可是注意只有splitVc的第一個子控制器纔會被設置爲主視圖控制器,只有第二個子控制器纔會被設置爲明細視圖控制器圖片
[self addChildViewController:masterVc];開發
代碼重構-容器視圖get
1.代碼實現容器視圖 容器視圖的使用場景: 內嵌視圖控制器string
2.具體處理:it
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);
}];
}