日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

根据上边栏和下边栏的高度进行布局

發(fā)布時(shí)間:2024/1/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 根据上边栏和下边栏的高度进行布局 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 問題

從iOS7開始,視圖控制器會(huì)滲透到各種Bar下面,包括:NavigationBar、ToolBar、TabBar、StatusBar等;這些Bar會(huì)擠占視圖的空間,在布局時(shí)就需要根據(jù)各種Bar所擠占的空間大小來計(jì)算控件的frame,本案例直接在上一個(gè)案例的基礎(chǔ)上實(shí)現(xiàn),根據(jù)上邊欄和下邊欄的高度對界面進(jìn)行布局,如圖1、圖2所示:

?

2 方案

首先在上一個(gè)案例的基礎(chǔ)上增加一個(gè)NavigationController和TabBarController,在界面的中間拖放一個(gè)Button控件,標(biāo)題設(shè)置為“隱藏NavigationBar”,并將Button控件關(guān)聯(lián)成TRViewController的私有方法hideNavigationBar。

然后在ViewController類中重寫布局方法viewDidLayoutSubviews,在該方法中根據(jù)父視圖的bounds和上下邊欄的高度計(jì)算Button和Label的frame。

3 步驟

實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。

步驟一:創(chuàng)建項(xiàng)目,添加按鈕控件

在上一個(gè)案例的基礎(chǔ)上增加一個(gè)NavigationController和TabBarController,在界面的中間拖放一個(gè)Button控件,標(biāo)題設(shè)置為“隱藏NavigationBar”,如圖3所示:

然后將Button控件關(guān)聯(lián)成ViewController的私有方法hideNavigationBar,該方法的功能是將導(dǎo)航欄隱藏或顯示,代碼如下所示:

- (IBAction)hideNavigationBar:(id)sender {

? ? self.navigationController.navigationBarHidden = !self.navigationController.navigationBarHidden;

}

步驟二:重寫布局方法viewDidLayoutSubviews,進(jìn)行界面布局

在ViewController類中重寫布局方法viewDidLayoutSubviews,在該方法中根據(jù)先通過屬性self.topLayoutGuide.length和self.bottomLayoutGuide.length獲取到上下邊欄的高度,然后再通過父視圖的bounds和上下邊欄的高度計(jì)算出Button和Label的frame,代碼如下所示:

- (void)viewDidLayoutSubviews

{

? ? [super viewDidLayoutSubviews];

? ? CGFloat buttonWidth = (self.view.bounds.size.width - 20 - 20 - 10) * 0.5;

? ? //iOS7開始,可以隨時(shí)知道VC的上面和下面被各種Bar占據(jù)了多少的空間

? ? CGFloat top = self.topLayoutGuide.length;

? ? CGRect frame =CGRectMake(20,top+40,buttonWidth,40);

? ? self.button1.frame = frame;

?? ?

? ? frame.origin.x += buttonWidth + 10;

? ? self.button2.frame = frame;

? ? //下面的各種Bar(TabBarToolBar)占了VC多高的空間

? ? CGFloat bottom = self.bottomLayoutGuide.length;

? ? frame = self.label.frame;

? ? frame = CGRectMake(self.view.bounds.size.width - 20 - frame.size.width , self.view.bounds.size.height - 10 - frame.size.height - bottom, frame.size.width, frame.size.height);

? ? self.label.frame = frame;

?? ?

? ? frame = self.hideButton.frame;

? ? frame.origin.x = self.view.bounds.size.width * 0.5 - frame.size.width * 0.5;

? ? frame.origin.y = self.view.bounds.size.height * 0.5 - frame.size.height * 0.5;

? ? self.hideButton.frame = frame;

}

4 完整代碼

本案例中,ViewController.m文件中的完整代碼如下所示:

#import "ViewController.h"

?

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIButton *button1;

@property (weak, nonatomic) IBOutlet UIButton *button2;

@property (weak, nonatomic) IBOutlet UILabel *label;

@property (weak, nonatomic) IBOutlet UIButton *hideButton;

- (IBAction)hideNavigationBar:(id)sender;

@end

?

@implementation ViewController

- (void)viewDidLayoutSubviews

{

? ? [super viewDidLayoutSubviews];

? ? CGFloat buttonWidth = (self.view.bounds.size.width - 20 - 20 - 10) * 0.5;

? ? //iOS7開始,可以隨時(shí)知道VC的上面和下面被各種Bar占據(jù)了多少的空間

? ? CGFloat top = self.topLayoutGuide.length;

? ? CGRect frame =CGRectMake(20,top+40,buttonWidth,40);

? ? self.button1.frame = frame;

?? ?

? ? frame.origin.x += buttonWidth + 10;

? ? self.button2.frame = frame;

? ? //下面的各種Bar(TabBarToolBar)占了VC多高的空間

? ? CGFloat bottom = self.bottomLayoutGuide.length;

? ? frame = self.label.frame;

? ? frame = CGRectMake(self.view.bounds.size.width - 20 - frame.size.width , self.view.bounds.size.height - 10 - frame.size.height - bottom, frame.size.width, frame.size.height);

? ? self.label.frame = frame;

?? ?

? ? frame = self.hideButton.frame;

? ? frame.origin.x = self.view.bounds.size.width * 0.5 - frame.size.width * 0.5;

? ? frame.origin.y = self.view.bounds.size.height * 0.5 - frame.size.height * 0.5;

? ? self.hideButton.frame = frame;

}

?

- (IBAction)hideNavigationBar:(id)sender {

? ? self.navigationController.navigationBarHidden = !self.navigationController.navigationBarHidden;

}

?

轉(zhuǎn)載于:https://www.cnblogs.com/yhj1787354782/p/5053546.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的根据上边栏和下边栏的高度进行布局的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。