第一步,隐藏导航栏底部的分割线

如何隐藏导航栏底部的分割线(shadow image/ hairline)?

    navigationBar.clipsToBounds = YES;    //隐藏navigationBar.clipsToBounds = NO;     //显示

因为分割线是显示在导航栏外部的,已经超过了导航栏的高度,通过 [UIView setClipsToBounds:bool] 决定是否显示 View frame 之外的部分。

也可以根据这个分割线的特性获取 Ta 这个 View,然后通过 [UIView setHidden:hidden] 方法控制是否需要显示。

首先,Ta 是个一个 UIImageView, 并且 Ta 的 height 不大于 1:

- (UIImageView *)findHairlineFromView:(UIView *)view
{if ([view isKindOfClass:[UIImageView class]] && view.frame.size.height <= 1.0) {return (UIImageView *)view;}for (UIView *subView in view.subviews) {UIImageView *imageView = [self findHairlineFromView:subView];if (imageView) {return imageView;}}return nil;
}

//在 viewDidLoad 方法中获取 hairline
hairlineView = [self findHairlineFromView:self.navigationController.navigationBar];//在 viewWillAppear:
[hairlineView setHidden:YES];//在 viewWillDisappear:
[hairlineView setHidden:NO];

第二部,增加导航栏的“高度”

如果注意观察 apple 的官方应用,如 “日历” 或 “App Store”,会发现这其实不是一个导航栏 (NavigationBar),而是自定义的导航栏恰好顶在系统的导航栏下面,看起来好像一个。实际上是两个导航栏的合体。

如果只是改变系统导航栏的 Frame,会发现导航栏上 UIBarButtonItem 和 Title 始终都会挨着导航栏的下沿。所以,就考虑通过上面的方法实现。

先初始化一个自定义导航栏:

self.customNavigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 100, self.view.bounds.size.width, 60)];
self.customNavigationBar.delegate = self;
[self.view addSubview:self.customNavigationBar];

实现 <UINavigationBarDelegate> 中的方法

- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar
{return UIBarPositionTopAttached;
}

效果:

链接:http://stackoverflow.com/a/21999916

iOS7以上: 实现如“日历”的 NavigationBar相关推荐

  1. iOS7适配问题总结

    一.状态栏(statusBar) 在iOS7中view默认是全屏模式,状态栏的高度也加在了view的高度上,例如iOS7之前iphone5中self.view.frame.size.height = ...

  2. 关于iOS7 设计师需要了解的十件事

    在今年的WWDC上,苹果推出了采用全新设计语言打造的iOS7.新系统弃用了诸如皮革.木质一类的伪3D拟真效果,取而代之的是更加简洁轻量的设计路线,其中文字排版成了重头戏,另外在某些方面也受到了扁平化设 ...

  3. iOS开发 -- IOS7界面兼容,从4.3到7.0兼容的NavigationBar ,IOS7 NavigationBar 适配

    最近项目有个棘手的问题--适配IOS7.... 由于IOS7把整个内容区都上移了20,所以很多不是全屏的应用都不能很好的兼容,换用苹果文档的一句话就是说:如果你们原来的app就是全屏模式运行的,那你们 ...

  4. html ios风格日历,极致演绎iOS7风格 简约日历应用Cal体验

    昨日小编推荐了扁平风的天气应用,而今天推荐的是来自 Any.DO开发商的一款日历应用<Cal | Calendar for Living.>,不仅秉承了之前一贯的简洁实用风格,连UI也设计 ...

  5. 【转】《iOS7 by Tutorials》系列:iOS7的设计精髓(上)

    简介: 本文翻译自<iOS7 by Tutorials>一书的第一章"Designing for iOS 7",主要从程序员角度介绍了iOS7的新设计理念,堪称神作!本 ...

  6. IOS7为什么遭吐槽?

    如果将ios7与7年前的ios相比,ios7强大了不止一点点.但仅仅将ios7与7年前的ios相比显然是不科学的,因为今天的智能手机操作系统不再只是ios的天下. 夫妻之间还有7年之氧,何况ios与用 ...

  7. (转)iOS7界面设计规范(1) - UI基础 - 为iOS7而设计

    今天开个新坑.其实老早就想做这事儿了.记得前一两年,苹果官方还会在开发者中心提供中文的HIG(Human Interface Guideline),后来给没了:网上能够找到的中文版本不知是官方还是同行 ...

  8. 自定义iOS7导航栏背景,标题和返回按钮文字颜色

    在iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem 更改导航栏的背景和文字Col ...

  9. ios7之后的一些更改

    //定义宏,判断ios7 #define IOS7 [[[UIDevice currentDevice]systemVersion] floatValue] >= 7.0 if (iOS7) { ...

  10. edgesForExtendedLayout ios7新特性

    为什么80%的码农都做不了架构师?>>>    edgesForExtendedLayout是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向. 因为iOS7鼓励全 ...

最新文章

  1. python3.3中print换行
  2. Ubuntu12.04使用技巧
  3. Ubuntu 14.04 分区方案
  4. 九宫重排_康拓展开_bfs
  5. mingw64+msys2下使用cmake问题
  6. pytorch实战从入门到精通第三部分——数据处理
  7. 五款可以取代 Slack 的开源工具
  8. OSPF沉默接口配置
  9. 《白话大数据与机器学习》读书笔记1
  10. 无法保存在此处,请选择其他位置
  11. 视频服务器信号转换器,DVI转换器
  12. 用MATLAB画nyquist图时,怎样只花出一半的图?
  13. 洛谷P2530 [SHOI2001]化工厂装箱员
  14. jq轮播图——无缝轮播
  15. 苹果系统tft选哪个服务器不卡,tft和ips选哪个 tft和ips区别介绍【图文】
  16. android硬件加速导致绘制,Android中的硬件加速
  17. 通过类型转换来显示一些字符在Unicode表中的位置,以及Unicode表中某些位置上的字符
  18. 判断数组类型的方法(Array.isArray)以及Math数字对象
  19. 古代密码学破解方式-频率分析法
  20. vue 自定义生成表格 并且可以输入

热门文章

  1. mysql 命令创建一个用户名和密码_Mysql的进入数据库指令和创建新用户密码的介绍...
  2. 【 Educational Codeforces Round 71 (Rated for Div. 2) F】Remainder Problem【分块】
  3. 笔记本计算机外壳的制作过程,笔记本电脑外壳选材不可小视
  4. SSRF 服务器端请求伪造
  5. 2021年浏阳市五中高考成绩查询,浏阳市2021年“三考”增加考生万余名
  6. eslint 换行_给 eslint 写一个插件
  7. ResNet----残差结构
  8. LightOj 1088 - Points in Segments (二分枚举)
  9. C# 网页自动填表自动登录 .
  10. poj3694 Network 求桥边个数[tarjan + LCA]