navigationbar的高度 bar高度 是多少

君,已阅读到文档的结尾了呢~~
广告剩余8秒
文档加载中
欢迎大家加入清源的android学习培训①群,里面有高手和干货希望你能加入进来。一起学习和交流,群号是:,加群时请验证:qy777,谢谢!
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
获取屏幕真实高度包括底部Navigation Bar 高度
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口主题 : 大大们。我想修改设置一下UINavigationBar的高度。有什么好办法不。以下的办法都不行
级别: 新手上路
可可豆: 302 CB
威望: 302 点
在线时间: 237(时)
发自: Web Page
来源于&&分类
大大们。我想修改设置一下UINavigationBar的高度。有什么好办法不。以下的办法都不行&&&
第1种:nav.navigationBar.frame = CGRectMake(0.0,0.0,320,10);结果:不行!第2种:for(UIView *view in nav.navigationBar.subviews)&&&&{&&&&&&if([view isKindOfClass:[UIImageView class]])&&&&&& {&&&&&&&&&&&&[view setFrame:CGRectMake(0.0,0.0,320,10)];&&&&&& } else{&&&&&&&&&&&&&&&&&&&&&& [view setFrame:CGRectMake(0.0,0.0,320,10)];&&&&&&}}结果:也不行!
级别: 新手上路
可可豆: 302 CB
威望: 302 点
在线时间: 237(时)
发自: Web Page
终于搞定了。。原来navigationBar在mainxib被固定为44,要想使它该变就必须在viewwillappear里改变他。。嘻嘻。希望对其他人有帮助
级别: 侠客
可可豆: 480 CB
威望: 480 点
在线时间: 121(时)
发自: Web Page
感谢你的分享
级别: 新手上路
UID: 33479
可可豆: 160 CB
威望: 162 点
在线时间: 664(时)
发自: Web Page
这个方法的确有效,可是转屏之后就没用了,大人还有没有其他的方法?
级别: 禁止发言
可可豆: 3511 CB
威望: 3511 点
在线时间: 428(时)
发自: Web Page
用户被禁言,该主题自动屏蔽!
级别: 禁止发言
可可豆: 420 CB
威望: 420 点
在线时间: 56(时)
发自: Web Page
用户被禁言,该主题自动屏蔽!
级别: 新手上路
可可豆: 40 CB
威望: 40 点
在线时间: 2(时)
发自: Web Page
级别: 圣骑士
可可豆: 3219 CB
威望: 3279 点
在线时间: 1139(时)
发自: Web Page
我依稀记得 这个的高度是不允许被修改的
GIT: /Doraemomo/
级别: 新手上路
可可豆: 190 CB
威望: 140 点
在线时间: 25(时)
发自: Web Page
navigation bar 的高度是标准的吧, 改了高度,苹果会不会不批准程序呢?
级别: 圣骑士
可可豆: 4054 CB
威望: 4004 点
在线时间: 792(时)
发自: Web Page
直接用toolbar吧。
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版1161人阅读
开发笔记(13)
新建一个UINavigationBar的Category,如下:
@implementation UINavigationBar (CustomHeight)
- (CGSize)sizeThatFits:(CGSize)size {
// Change navigation bar height. The height must be even, otherwise there will be a white line above the navigation bar.
CGSize newSize = CGSizeMake(self.frame.size.width, 74);
return newS
-(void)layoutSubviews {
[super layoutSubviews];
CGRect barFrame = self.
barFrame.size.height = 74;
self.frame = barF
// Make items on navigation bar vertically centered.
int i = 0;
for (UIView *view in self.subviews) {
if (i == 0)
float centerY = self.bounds.size.height / 2.0f;
CGPoint center = view.
center.y = centerY;
view.center =
注意:如果只重载sizeThatFits函数,则可能出现UINavigationBar宽度不正确的现象,因为在这时获得的frame可能不正确。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:54867次
排名:千里之外
原创:21篇
转载:35篇
(1)(1)(3)(1)(1)(3)(4)(5)(1)(14)(13)(11)如何自定义NavigationBar的高度 - 推酷
如何自定义NavigationBar的高度
UINavigationBar的高度在苹果官方的SDK中是固定的44个点,但是实际项目中我们却有可能遇到这样的情况,如下图:
这样的一个UINavigationBar的高度达到了84个点,这就需要我们自定义系统自带的UINavigationBar的高度,但是系统并没有直截了当的方法来调整这个NavigationBar的Height,于是我进行了以下的尝试。
在需要进行调整的那个ViewController类的ViewWillApplear这个方法对self.navigationController.navigationBar的frame进行赋值,其中frame.size.height变为我们需要的新高度(本例中为84),然后在ViewWillDisappear这个方法中将frame再改回去就可以了。
注:这里将代码写在ViewWillAppear/DisAppear里面的原因是根据这个自定义高度UINavigationBar只在某一个界面出现,如果你所有的UINavigationBar的高度是统一的,那么就没必要这么写,只需要写在第一次出现的ViewController的ViewDidLoad消息里面就可以了。
代码如下:
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
CGRect rect = self.navigationController.navigationBar.
self.navigationController.navigationBar.frame = CGRectMake(rect.origin.x,rect.origin.y,rect.size.width,84);
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
CGRect rect = self.navigationController.navigationBar.
self.navigationController.navigationBar.frame = CGRectMake(rect.origin.x,rect.origin.y,rect.size.width,44);
viewWillAppear
viewWillAppear
navigationController
navigationBar
navigationController
navigationBar
CGRectMake
viewWillDisappear
viewWillDisappear
navigationController
navigationBar
navigationController
navigationBar
CGRectMake
OK,运行!UINavigationBar的高度正确地发生变化,事情就这么愉快地解决了!等等,导航栏上的标题和返回按钮的位置却都贴到最下面了,如下图:
为什么会是这样?发生了什么?我也不知道!但是现在很明显就是需要我们去调整这两个“UIView”的frame,把他们向上移动40个点,为之后要添加的其他控件留出空间。很简单,对吧?
然后,数个小时过去后……
我靠,这些货特么根本不是UIView嘛!
返回按钮是UIBarButtonItem,继承自UIBarItem,UIBarItem继承自NSObject,标题这个就更悲剧了,如果你默认使用ViewController的title属性做为标题(本例就是),那么self.navigationItem.titleView这个值为nil,更改nil的frame什么事情也不会发生。
这期间我试过各种非正常手段去找到他们,包括遍历UINavigationBar的view hierarchy(视图层级),试图使用UIBarButtonItem的私有变量,尝试修改UIBarButtonItem的CustomView.frame等……都无功而返。
然后开始上Google搜索,StackOverflow一片找,SO上果然大神云集,问题的解答也相当高大上。
答案基本上有2种:
1、不用系统的NavigationBar啦,咱们自定义一个就好啦,然后重载layoutSubView里面的怎样怎样云云。
2、这个简单,我写了个NavigationBar的分类(Category),里面加个什么消息xxx。
小菜我一看到自定义控件神马的立即就給外国大爷们跪了,Category什么的更是从来没用过……其实我只需要更改一下这两个控件的高度而已,用不用这么暴力?
于是我开始查文档,终于被我找到下面这两个消息:
UINavigationBar下:
- (void)setTitleVerticalPositionAdjustment:(CGFloat)adjustment forBarMetrics:(UIBarMetrics)barMetrics
官方描述:
Sets the title’s vertical position adjustment for given bar metrics.
调整某个BarMetrics(这个不知道怎么翻译)下标题的垂直位置。
UIBarButtonItem下:
- (void)setBackgroundVerticalPositionAdjustment:(CGFloat)adjustment forBarMetrics:(UIBarMetrics)barMetrics
官方描述:
Sets the background vertical position offset for given bar metrics.This offset is used to adjust the vertical centering of bordered bar buttons within the bar. 调整某个BarMetrics(这个不知道怎么翻译)下背景的垂直位置的偏差值,这个偏差值用来调整该圆角按钮的垂直中心在Bar内的位置。
OhMyGod,终于找到组织了!赶紧试一下,还是刚才的ViewController,在ViewWillAppear这个消息中再加上这么两句:
[self.navigationController.navigationBar setTitleVerticalPositionAdjustment:-40.0 forBarMetrics:UIBarMetricsDefault];
[self.navigationItem.leftBarButtonItem setBackgroundVerticalPositionAdjustment:-40.0 forBarMetrics:UIBarMetricsDefault];
<div data-line="crayon-530e6f
<div data-line="crayon-530e6f
navigationController
navigationBar
setTitleVerticalPositionAdjustment
forBarMetrics
UIBarMetricsDefault
navigationItem
leftBarButtonItem
setBackgroundVerticalPositionAdjustment
forBarMetrics
UIBarMetricsDefault
注:这里使用leftBarButtonItem是因为我使用了自定义图片的返回按钮,这时leftBarButton就替代了backBarButton。
不要忘了在ViewWillDisappear的时候再把标题的位置调整回来,不然当标题就会跳到屏幕的最上方了;另一方面,返回按钮却不用设置了,这两行代码的作用机制不一样,返回按钮只和当前的ViewController有关:
[self.navigationController.navigationBar setTitleVerticalPositionAdjustment:0.0 forBarMetrics:UIBarMetricsDefault];
<div data-line="crayon-530e6f
navigationController
navigationBar
setTitleVerticalPositionAdjustment
forBarMetrics
UIBarMetricsDefault
运行结果:
太棒啦!终于成功了!标题和返回按钮的垂直位置按照我们设置的向上移动了40个点!
后面的事情就简单了,按照设计湿GG或者设计师MM的要求把相应的UI控件加到self.navigationController.navigationBar中,收工!
注:上述运行结果的前提是使用自定义图片的leftBarButtonItem作为返回按钮替代系统默认的backBarButtonItem,并且你的leftBarButtonItem是使用 initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action这个方法创建的(原因我后面会讲)。换句话说,在你的ViewController或者它的父类的ViewDidLoad方法里,应该有类似下面的两行代码:
UIBarButtonItem * item =[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@“这里是你的某个图片名&] style:UIBarButtonItemStyleBordered target:self
action:@selector(你的某个方法名)];
self.navigationItem.leftBarButtonItem =
<div data-line="crayon-530e6f
<div data-line="crayon-530e6f
UIBarButtonItem *
UIBarButtonItem
initWithImage
imageNamed
“这里是你的某个图片名&
UIBarButtonItemStyleBordered
你的某个方法名
navigationItem
leftBarButtonItem
如果你的需求刚好能用这个方法解决,那么恭喜你,因为小菜能拿出的干货就只有这么多了,后面的就全是困惑了……orz
做为一个iOS Level1的菜鸟,在费了好大的劲终于找到问题的解决方法之后,欣喜是肯定的,想得瑟一下是必然的,于是飘飘乎就想把相关的方法研究研究,搞个通用的解决方案出来。于是,噩梦开始了……
N多个小时过去了,毛个解决方案没搞出来,却搞出来了很多个问题……
问题1:系统默认的导航栏返回按钮垂直位置无法调节。
当返回按钮使用系统默认的backBarButtonItem的时候,使用UIBarButtonItem的- (void)setBackButtonBackgroundVerticalPositionAdjustment:(CGFloat)adjustment forBarMetrics:(UIBarMetrics)barMetrics来调整它的垂直位置,不起作用。
我进行了各种尝试,但是backBarButtonItem一直是nil,文档上说它会根据上一个ViewController的title属性来创建这个按钮,但是我找不到这个时机来调整执行上面这个消息。更准确的问题可能是,下图中的这个消息到底应该怎么用才能看到效果呢?
问题2:自定义的返回按钮在导航栏中的垂直位置仅在某一种情况下可以调节。
后来我又发现,即使不用系统默认地返回按钮,使用自定义的leftBarButtonItem,也只在使用 initWithImage:style target:action:这个方法创建的UIBarButtonItem时生效,使用其他init方法情况一律无效。至于什么原因不明觉厉。
这两个问题我百撕不得姐,求大家指教,提前说声谢谢!
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致> 博客详情
摘要: navigationBar高度
如果想在系统的navigationBar上修改.
那么你需要在navigationController的根控制器
的viewWillAppear和viewDidAppear里都调用下面的方法.
自定义的titleView进行移动有效.
leftBarButtonItem和rightBarButtonItem只能用系统的方法创建出来,如果你是创建一个UIButton然后转换成leftBarButtonItem,
则向y值移动代码无效
如果你的left/rightBarButtonItem只要不是被系统的方法创建出来,
而且你想改变navigationBar高度,
那么我的办法就只有自定义了
就是创建一个View然后添加到navigationBar中
所以你不能用navigationBar的自带属性
里面的frame都要自己设置
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 70)];
view.backgroundColor = [UIColor orangeColor];
[self.navigationController.navigationBar addSubview:view];
#pragma mark - 自定义navigationBar的frame
- (void)customNavigationBarFrame {
&&& [self printViewHierarchy:self.navigationController.navigationBar]; &&&
&&&&// 在这里是 不能直接修改 一个控件的 height 你需要UIView的分类
&&&&// UIView的分类 必备
&&&&// 如果你没有 请联系我
&&& //修改NavigaionBar的高度 &&& self.navigationController.navigationBar.height += &#你要增加的值#&;
&&& NSLog(@"\n修改后"); && & &&& [self printViewHierarchy:self.navigationController.navigationBar]; && & &&& /// -------------- 向 y 进行移动 --------------- && & &&& [self.navigationController.navigationBar setTitleVerticalPositionAdjustment:-40.0 forBarMetrics:UIBarMetricsDefault]; && & &&& //[self.navigationItem.backBarButtonItem setBackgroundVerticalPositionAdjustment:-40.0 forBarMetrics:UIBarMetricsDefault]; && & &&& [self.navigationItem.leftBarButtonItem setBackgroundVerticalPositionAdjustment:-40.0 forBarMetrics:UIBarMetricsDefault]; && & &&& [self.navigationItem.rightBarButtonItem setBackgroundVerticalPositionAdjustment:-40.0 forBarMetrics:UIBarMetricsDefault];
#pragma mark - 这只是个打印
- (void)printViewHierarchy:(UIView *)superView { && & &&& static uint level = 0; && & &&& for(uint i = 0; i & i++){ &&&&&& & &&&&&&& printf("\t"); &&& } && & &&& const char *className = NSStringFromClass([superView class]).UTF8S && & &&& const char *frame = NSStringFromCGRect(superView.frame).UTF8S && & &&& printf("%s:%s\n", className, frame); && & &&& ++ && & &&& for(UIView *view in superView.subviews){ &&&&&&& [self printViewHierarchy:view]; &&&&&& & &&& } &&& -- }
&&& // MARK: 自定义navigationBar的frame属性 &&& func customNavigationBarFrame() {
&& & &&& // 在这里是 不能直接修改 一个控件的 height 你需要UIView的分类 && & &&& // UIView的分类 必备 && & &&& // 如果你没有 请联系我 && & &&& //修改NavigaionBar的高度 &&& navigationController!.navigationBar.height += 50;
&& & &&& /// -------------- 向 y 进行移动 --------------- && & &&&&&&& // 移动 title &&&&&&& navigationController?.navigationBar.setTitleVerticalPositionAdjustment(-20, forBarMetrics: .Default); &&&&&& & &&&&&&& //navigationItem.backBarButtonItem?.setBackgroundVerticalPositionAdjustment(-40, forBarMetrics: .Default);
&&&&&&& navigationItem.leftBarButtonItem?.setBackgroundVerticalPositionAdjustment(-40, forBarMetrics: .Default);
&&&&&&& navigationItem.rightBarButtonItem?.setBackgroundVerticalPositionAdjustment(-40, forBarMetrics: .Default);
这篇文章是我结合下面二章 得出的结果
修改navigationBar高度&&
向y值进行移动
人打赏支持
码字总数 51438
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥}

我要回帖

更多关于 自定义navigationbar 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信