iOS7以上: 实现如“日历”的 NavigationBar
第一步,隐藏导航栏底部的分割线
如何隐藏导航栏底部的分割线(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相关推荐
- iOS7适配问题总结
一.状态栏(statusBar) 在iOS7中view默认是全屏模式,状态栏的高度也加在了view的高度上,例如iOS7之前iphone5中self.view.frame.size.height = ...
- 关于iOS7 设计师需要了解的十件事
在今年的WWDC上,苹果推出了采用全新设计语言打造的iOS7.新系统弃用了诸如皮革.木质一类的伪3D拟真效果,取而代之的是更加简洁轻量的设计路线,其中文字排版成了重头戏,另外在某些方面也受到了扁平化设 ...
- iOS开发 -- IOS7界面兼容,从4.3到7.0兼容的NavigationBar ,IOS7 NavigationBar 适配
最近项目有个棘手的问题--适配IOS7.... 由于IOS7把整个内容区都上移了20,所以很多不是全屏的应用都不能很好的兼容,换用苹果文档的一句话就是说:如果你们原来的app就是全屏模式运行的,那你们 ...
- html ios风格日历,极致演绎iOS7风格 简约日历应用Cal体验
昨日小编推荐了扁平风的天气应用,而今天推荐的是来自 Any.DO开发商的一款日历应用<Cal | Calendar for Living.>,不仅秉承了之前一贯的简洁实用风格,连UI也设计 ...
- 【转】《iOS7 by Tutorials》系列:iOS7的设计精髓(上)
简介: 本文翻译自<iOS7 by Tutorials>一书的第一章"Designing for iOS 7",主要从程序员角度介绍了iOS7的新设计理念,堪称神作!本 ...
- IOS7为什么遭吐槽?
如果将ios7与7年前的ios相比,ios7强大了不止一点点.但仅仅将ios7与7年前的ios相比显然是不科学的,因为今天的智能手机操作系统不再只是ios的天下. 夫妻之间还有7年之氧,何况ios与用 ...
- (转)iOS7界面设计规范(1) - UI基础 - 为iOS7而设计
今天开个新坑.其实老早就想做这事儿了.记得前一两年,苹果官方还会在开发者中心提供中文的HIG(Human Interface Guideline),后来给没了:网上能够找到的中文版本不知是官方还是同行 ...
- 自定义iOS7导航栏背景,标题和返回按钮文字颜色
在iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem 更改导航栏的背景和文字Col ...
- ios7之后的一些更改
//定义宏,判断ios7 #define IOS7 [[[UIDevice currentDevice]systemVersion] floatValue] >= 7.0 if (iOS7) { ...
- edgesForExtendedLayout ios7新特性
为什么80%的码农都做不了架构师?>>> edgesForExtendedLayout是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向. 因为iOS7鼓励全 ...
最新文章
- python3.3中print换行
- Ubuntu12.04使用技巧
- Ubuntu 14.04 分区方案
- 九宫重排_康拓展开_bfs
- mingw64+msys2下使用cmake问题
- pytorch实战从入门到精通第三部分——数据处理
- 五款可以取代 Slack 的开源工具
- OSPF沉默接口配置
- 《白话大数据与机器学习》读书笔记1
- 无法保存在此处,请选择其他位置
- 视频服务器信号转换器,DVI转换器
- 用MATLAB画nyquist图时,怎样只花出一半的图?
- 洛谷P2530 [SHOI2001]化工厂装箱员
- jq轮播图——无缝轮播
- 苹果系统tft选哪个服务器不卡,tft和ips选哪个 tft和ips区别介绍【图文】
- android硬件加速导致绘制,Android中的硬件加速
- 通过类型转换来显示一些字符在Unicode表中的位置,以及Unicode表中某些位置上的字符
- 判断数组类型的方法(Array.isArray)以及Math数字对象
- 古代密码学破解方式-频率分析法
- vue 自定义生成表格 并且可以输入
热门文章
- mysql 命令创建一个用户名和密码_Mysql的进入数据库指令和创建新用户密码的介绍...
- 【 Educational Codeforces Round 71 (Rated for Div. 2) F】Remainder Problem【分块】
- 笔记本计算机外壳的制作过程,笔记本电脑外壳选材不可小视
- SSRF 服务器端请求伪造
- 2021年浏阳市五中高考成绩查询,浏阳市2021年“三考”增加考生万余名
- eslint 换行_给 eslint 写一个插件
- ResNet----残差结构
- LightOj 1088 - Points in Segments (二分枚举)
- C# 网页自动填表自动登录 .
- poj3694 Network 求桥边个数[tarjan + LCA]