IOS开发中怎么删除swift 导航栏半透明中的半透明选项

iOS 导航栏透明,变色动画 - 简书
iOS 导航栏透明,变色动画
iOS导航栏NavigationBar设置透明,以及添加变色的动画,类似知乎日报的导航栏。
只需设置NavigationBar的背景图片为一张空图片即可
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsCompact];
NavigationBar下边有一个ShadowImage,也可以通过设置空的UIImage设置透明。
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
在NavigationBar下插入一个view,执行动画改变这个view的透明度即可。
CGRect frame = self.navigationController.navigationBar.
alphaView = [[UIView alloc] initWithFrame:CGRectMake(0, -20, frame.size.width, frame.size.height+20)];
alphaView.backgroundColor = [UIColor blueColor];
alphaView.userInteractionEnabled = NO;
[self.navigationController.navigationBar insertSubview: alphaView atIndex:0];
就这么简单!
iOS开发进阶修炼中。
用到的组件1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好...
用到的组件1、通过CocoaPods安装项目名称项目信息AFNetworking网络请求组件FMDB本地数据库组件SDWebImage多个缩略图缓存组件UICKeyChainStore存放用户账号密码组件Reachability监测网络状态DateTools友好化时间MBP...
发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注
09:45字数 61697阅读 3316评论 2喜欢 85 用到的组件 1、通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FM...
TimLiu-iOS Swift版本点击这里欢迎加入交QQ流群:
github排名 https://github.com/trending,github搜索:https://github.com/search 使用方法:根据目录关键字搜索,记得包含@,...
AFNetworking网络请求组件SDWebImage多个缩略图缓存组件FMDB本地数据库组件UICKeyChainStore存放用户账号密码组件Reachability监测网络状态DateTools友好化时间MBProgressHUD一款提示框第三方库MWPhotoBr...
二月的早春,阳光灿烂,春意盎然,正是春暖花开,带上孩子去寻春的好时节! 因为桃花林的传说而辗转奔波,到公园后却发现桃花的花期未到,唯有零星的花骨朵儿点缀其间,只好再约,待花期正浓时再赴此地。 艳阳高照,其它的花儿也在竞相绽放。 最大收获:发现孩子也喜欢拍照,以下除第一张图照...
很多人过了35岁,心中都充满了困惑,特别是到达不惑之年,困惑倒是最多的。其中包括对以往工作生活的反思,对自身特长、兴趣和梦想的重新认识,同时,也对未来的发展非常迷茫、焦虑和无力。突破人生发展瓶颈的关键在于读书和旅行。读书可以丰富人的精神世界,旅行能够丰富人的物理世界...
得之我幸不得我命 争取追求自己期望的,别纠结过去的…… 直面苦难,才能享受人生的喜怒哀乐…… 悲伤的故事,悲伤的情感,但,还要继续前进 淡定从容,学习知识,懂得规律,才能淡然……
在三江城里的饭馆喝“三江大曲”是有奖的,人民币叠好藏在瓶盖下面,旋开盖后查看中多少,面额二、五、十、五十元,最高是五十元。 “佳慧,你看我这手!”尤曼丽广告自己的手语言很特别,她高举起手自己先看,然后伸到司佳慧的面前,“还是手吗?” “当然是手,手怎么啦?” 尤曼丽伸出另一...
表姐单位组织的旅行因为同行的同事有事正好我有空就陪她一起去了,然后,坑爹的6日游开始了,以下所有见闻都是本人道听途说,没有任何事实依据,大家随便看看就好。 昆明、西双版纳、中缅边境精品6日游,看上去不错的样子,实际团费一人600元人民,是的6百你没看错也没听错,这是我们之后...方案的选择:
  1、使用UINavigationController自带的setNavigationBarHidden: animated:viewWillDisappear:中设置隐藏,在要跳转的控制器的viewWillAppear:中设置导航栏显示。
  2、在每次Push前对当前页面进行截图并保存到数组,Pop时取数组最后一个元素显示,滑动结束后调用系统Pop方法并删除最后一张截图。
  3、使用iOS 7之后开放的,UIViewControllerAnimatedTransitioning协议,来实现自定义导航栏转场动画及交互。
  4、设置系统导航栏的背景为透明色,隐藏导航栏底部的线条,然后在控制器基类创建一个自定义的View,添加到self.view,frame为导航栏的位置
方案优缺点分析:
阅读(...) 评论()IOS开发中怎么删除导航栏中的半透明选项_百度知道
IOS开发中怎么删除导航栏中的半透明选项
我有更好的答案
去掉 “首页” 对应的CSS样式表中的 background-color: #F93505;
采纳率:75%
来自团队:
为您推荐:
其他类似问题
导航栏的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。20:24 提问
ios开发中怎么删除NavigationController?大神救我
ios开发中怎么删除NavigationController?大神救我!!!为啥我添加过之后,不知道该怎么删除了,好尴尬
按赞数排序
NavigationController 是没有没视图的
它只是一个容器
它只有在包装了一个视图控制器,或者是由【 self.navigationController
Push】才会显示导航栏
如果不想要它显示 可以在创建根视图的时候不用NavigationController 包装
或者不采用 Push 的方法弹出视图
用模态视图弹出 [self presentViewController:()]
希望能帮到你
有不周全的地方请见谅
删除?是不需要nav了还是不需要显示?搞不懂你到底什么意思
是想要重新建一个,把旧的删除掉,推倒重来,
你想推倒重来酒把NavigationController这个类删了,重新写过就行了,东西太多就复制粘贴。 如果你是只想不要上面的导航栏,就把你上个界面Push到这个界面的方法
改成Present过来
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐iOS 关于navigationBar的一些:毛玻璃、透明、动态缩放、动态隐藏 - IOS - 伯乐在线
& iOS 关于navigationBar的一些:毛玻璃、透明、动态缩放、动态隐藏
本文整理了一些关于navigationBar的非常规的但是较为实用的操作,包括利用毛玻璃、动态透明、动态item颜色、动态隐藏,以及头视图的动态缩放,并同时涉及了statusBar的动态设置(换色)。
先预览下整体效果:
Demo详见GitHub:
为了便于展示,类没有复用,也没有继承共有的父类,所有存在大量“有丝分裂”的重复代码。。。说白了就是懒。。。千万别学我就是了。
1.不要“浪费”了这块毛玻璃
这里所谓的不要浪费,只是个人的偏好,当然也是顺遂了苹果的UI特色之一:毛玻璃穿透效果。
一般界面上是有两块毛玻璃的:navigationBar和tabBar,很多APP都会自定义这两块Bar,不仅是颜色,甚至是控件本身。单考虑利用系统的Bar的话,如果不自定义颜色,就是利用毛玻璃效果本身了,然而很多APP,也并未利用起这个毛玻璃效果,简书的就是这样,不过简书应该是自定义了navigationBar?或许。
(这里插一句,就是QQ的某次更新,更新之后,navigationBar的蓝色变成了毛玻璃,之后的一次更新又换了回来……可能是被吐槽太多?这里应该是用户习惯先入为主的问题了;还有就是微信,微信应该算得上是个十分纯粹的iOS风格的APP,有留意过的话,也会发现其navigationBar是黑色的毛玻璃,或许是barStyle = UIBarStyleBlack,因为微信也是有很多非原生的处理的。)
下面结合tableView介绍下其与navigationBar的毛玻璃的作用效果。知道我可能要啰嗦什么的朋友可自行跳过这部分内容。
先对比下这两种效果(图不太清晰,仔细看navigationBar,还是很容易对比出来差别的):
有毛玻璃穿透效果的效果
没有毛玻璃穿透效果
1.1.一般的处理
- (UITableView *)tableView
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, ScreenWidth, ScreenHeight - 64)];
_tableView.delegate =
_tableView.dataSource =
_tableView.backgroundColor = [UIColor whiteColor];
_tableView.separatorStyle = UITableViewCellSeparatorStyleSingleL
return _tableV
1234567891011
&&- (UITableView *)tableView&&{&&&&&&if (!_tableView) {&&&&&&&&&&_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, ScreenWidth, ScreenHeight - 64)];&&&&&&&&&&_tableView.delegate = self;&&&&&&&&&&_tableView.dataSource = self;&&&&&&&&&&_tableView.backgroundColor = [UIColor whiteColor];&&&&&&&&&&_tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;&&&&&&}&&&&&&return _tableView;&&}
相信有很多人大概是以与这样类似的方式去初始化tableView的,origin.y=64,总高度-64,都是为了防止navigationBar的遮挡,然而这样的处理会产生一个bug,就是tableView整体居然下移了64……,然后就有了这段解决代码:
if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) {
self.automaticallyAdjustsScrollViewInsets = NO;
<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9
&&if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) {&&&&&&self.automaticallyAdjustsScrollViewInsets = NO;&&}
这是iOS7的特性之一,navigationBar自适应scrollView滑动视图,然而因为我们的+64的处理,导致系统的这个默认开启的功能就成了自作多情。如果
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)];
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)];
这样做,之前的“bug”自然就会没有,而且我们想要的毛玻璃效果就会自然的展现出来(如上图一),但是因为系统的自适应,在某些特殊情况下,依旧会产生不可控的bug,所以刚才处理bug的代码,还是有必要的。
1.2.“释放”系统的毛玻璃效果的处理
if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) {
self.automaticallyAdjustsScrollViewInsets = NO;
<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9
&&if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) {&&&&&&self.automaticallyAdjustsScrollViewInsets = NO;&&}
这样初始化tableView:
- (UITableView *)tableView
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)];
_tableView.delegate =
_tableView.dataSource =
_tableView.backgroundColor = [UIColor whiteColor];
_tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
_tableView.scrollIndicatorInsets = UIEdgeInsetsMake(64, 0, 0, 0);
_tableView.separatorStyle = UITableViewCellSeparatorStyleSingleL
return _tableV
<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9
&&- (UITableView *)tableView&&{&&&&&&if (!_tableView) {&&&&&&&&&&_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)];&&&&&&&&&&_tableView.delegate = self;&&&&&&&&&&_tableView.dataSource = self;&&&&&&&&&&_tableView.backgroundColor = [UIColor whiteColor];&&&&&&&&&&_tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);&&&&&&&&&&_tableView.scrollIndicatorInsets = UIEdgeInsetsMake(64, 0, 0, 0);&&&&&&&&&&_tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;&&&&&&}&&&&&&return _tableView;&&}
这里利用了edgeInset内嵌边距,tableView的frame依旧是全屏尺寸的,只是设置了下contentInset使得其内容视图的尺寸改变了,scrollIndicatorInsets是右侧的滑动指示器,要跟着一起才自然。如果当前页还有tabBar的话,只需要设置UIEdgeInsetsMake的bottom值就行。这样,上图一的毛玻璃穿透效果就自然的释放了出来。
1.3.设置contentInset带来的小问题
1.webView初始加载时底部的黑条
如果使用上述方式初始化webView(同样是滑动视图,有scrollView属性,可设置scrollView.contentInset),至于所谓的“黑条”,大致类似于下面的效果:&
黑条出现在视图底部,一般高度为64,也就是contentInset的top值,上图的因为设置关系要大很多。相信很多人都在浏览APP的webView时,在web加载完之前的空白页时,见到过这一现象。
关于这以现象的解决方法网上也有很多,我一般是在初始化时,将contentOffset.y设置一个(-64)的偏移量,这样,初始进入webView时,在不滑动页面的情况下,是不可见的,这算是较为温和的解决方法吧,还有一种就是,初始化时设置opaque=NO,也就是使得view透明,但是在加载之后,要设置opaque=YES,也就是默认不透明,这样,黑条是彻底不可见的。
2.滑动偏移量改变
在实现一些滑动视图的动态变化的处理中,例如稍后提到的动态缩放,一般会用代理检测contentOffset.y值,但是因为设置了contentInset.top,此时contentOffset.y值也就发生了变化:&
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
CGFloat offsetY = scrollView.contentOffset.y + self.tableView.contentInset.//注意
<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{&&&&CGFloat offsetY = scrollView.contentOffset.y + self.tableView.contentInset.top;//注意}
初始不再是0,而是-64,也就是-top。
1.4.为什么需要毛玻璃效果
费了一些功夫,都只是为了实现毛玻璃效果,至于为什么要这个毛玻璃穿透效果,我也说不好,喜好也罢,设计风格也罢,至少,感觉这样做出的APP,不用专门考虑各种Bar的配色什么的,动态模糊穿透的彩色,也的确很漂亮,至少,iOS的UI风格有这样的趋势。也不要小瞧这个毛玻璃效果,真正实现一个高效的毛玻璃,也就是动态模糊渲染,也是很麻烦的,一些三方库,为了版本适配(适配iOS7),自定义的毛玻璃,也是利用了系统的toolBar。看过一些文章,介绍来介绍去,还是说,用系统在iOS8之后提供的API实现毛玻璃是最好的方式。
下图(渣图……)是我最近封装了有一阵子的一个自定义控件,同样是为了效果,用toolBar自定义了一块毛玻璃,这个控件还未彻底完善,稍后会开源,下图只是其中一种样式,这个控件的自定义程度还是非常高的。
2.navigationBar的透明
有时候,我们需要将navigationBar设置透明,但不是隐藏,因为还需要其item控件(返回键什么的),虽然navigationBar是继承于UIView的,但是直接设置其alpha是无效的,应该是因为navigationBar复合的视图层级:
根据视图层级关系,我们用这个十分简单的方法来设置navigationBar的透明:
[[[self.navigationController.navigationBar subviews] objectAtIndex:0] setAlpha:0];
[[[self.navigationController.navigationBar subviews] objectAtIndex:0] setAlpha:0];
关于navigationBar设置透明的方法,不知上述一种,还有许多,详见此文,非常具有参考价值:
如果想像QQ空间或者微博那样动态的改变透明度,只需要在scrollViewDidScroll方法中,动态去设置alpha值就行,何时开始改变、变化率全凭自定义的参数控制,具体详见Demo中的代码。
3.动态statusBar颜色
改变item的颜色很简单,只需设置:
self.navigationController.navigationBar.tintColor = [UIColor blackColor];
<div class="crayon-num" data-line="crayon-5a46c9
self.navigationController.navigationBar.tintColor = [UIColor blackColor];
动态设置的方式同刚才的alpha。这里主要说的是statusBar的颜色或者说样式的改变。
iOS7之后,statusBar不再是全局属性,每个VC都可自行控制statusBar的样式,虽然样式只有简单的字体黑或白两种,但是在很多情况下都是很有用的,尤其是上面的navigationBar的alpha动态改变,在QQ空间中就有这个效果。
在设置statusBar样式之前,需要做一个处理,而且是针对navigationBar的处理,在使用了navigationController之后,直接设置某一个VC的statusBar的样式是无效的,因为navigationBar是唯一的,所有压栈推出的VC,都是navigationController的子控制器,这就需要指定statusBar样式改变的VC为当前的topVC,具体方式网上也有很多,这里只介绍个人使用的一种。
首先创建一个继承于UINavigationController的子类,在这个类中实现下面的方法:
- (UIViewController *)childViewControllerForStatusBarStyle
return self.topViewC
<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9
&&- (UIViewController *)childViewControllerForStatusBarStyle&&{&&&&&&return self.topViewController;&&}
或者是同样效果的这个方法:
- (UIStatusBarStyle)preferredStatusBarStyle
UIViewController * topVC = self.topViewC
return [topVC preferredStatusBarStyle];
<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9
&&- (UIStatusBarStyle)preferredStatusBarStyle&&{&&&&&&UIViewController * topVC = self.topViewController;&&&&&&return [topVC preferredStatusBarStyle];&&}
之后,只需在要改变statusBar样式的VC类中实现:
#ifdef __IPHONE_7_0
- (UIStatusBarStyle)preferredStatusBarStyle
if (_statusBarStyleControl) {
return UIStatusBarStyleD
return UIStatusBarStyleLightC
- (BOOL)prefersStatusBarHidden
return NO;
123456789101112131415
&&#ifdef __IPHONE_7_0&&- (UIStatusBarStyle)preferredStatusBarStyle&&{&&&&&&if (_statusBarStyleControl) {&&&&&&&&&&return UIStatusBarStyleDefault;&&&&&&}&&&&&&else {&&&&&&&&&&return UIStatusBarStyleLightContent;&&&&&&}&&}&&- (BOOL)prefersStatusBarHidden&&{&&&&&&return NO;&&}&&#endif
__IPHONE_7_0是系统的宏,这里用来版本适配,这个不写貌似没有关系?因为之前试了iOS7以下的系统没有崩溃,iOS7之前没有这个方法,应该是不会执行的,也就不会崩溃。
preferredStatusBarStyle就是控制用来控制statusBar颜色或者说样式的,_statusBarStyleControl是自定义的一个用来动态控制的BOOL属性。
prefersStatusBarHidden这个控制statusBar的显示隐藏,建议NO或直接默认不写,如果设置隐藏,视图会整体上移20,效果不太好,看具体需求。
至于控制statusBar的改变,也是在scrollViewDidScroll代理中动态实现,例如某一情况下触发如下:
_statusBarStyleControl = YES;
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
[self setNeedsStatusBarAppearanceUpdate];
_statusBarStyleControl = YES;if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {&&&&[self setNeedsStatusBarAppearanceUpdate];}
第一步是设置之前提到的_statusBarStyleControl标志位的值的切换,第二部是最重要的setNeedsStatusBarAppearanceUpdate,这个系统的方法是在改变statusBar显示样式之前必须执行的,否则preferredStatusBarStyle不会再当前视图加载完成后再次执行。
4.navigationBar的动态隐藏
navigationBar的隐藏很简单:
[self.navigationController setNavigationBarHidden:YES animated:YES];
<div class="crayon-num" data-line="crayon-5a46c9
[self.navigationController setNavigationBarHidden:YES animated:YES];
这个方法可以使动态隐藏时有动画效果,不会显得突兀。
动态隐藏的效果有两个场景:一个就是例如简书这样的,在浏览时,上滑,navigationBar隐藏,下滑navigationBar显示,在这期间,手指是不松开的,这需要实时检测当前是上滑还是下滑;第二个场景是Safari浏览器那样的,滑动后松手,根据上滑还是下滑设置隐藏(Safari的navigationBar不是隐藏,只是变化)。这样的两种场景虽然很相似,但就是松不松手的问题,处理方式和体验也是完全不同的。
1.第二场景,松手
这个处理十分简单:&
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
NSLog(@"======== %lf", velocity.y);
if(velocity.y & 0) {
[self.navigationController setNavigationBarHidden:YES animated:YES];
[self.navigationController setNavigationBarHidden:NO animated:YES];
<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{&&&&NSLog(@"======== %lf", velocity.y);&&&&if(velocity.y & 0) {&&&&&&&&[self.navigationController setNavigationBarHidden:YES animated:YES];&&&&}&&&&else {&&&&&&&&[self.navigationController setNavigationBarHidden:NO animated:YES];&&&&}}
velocity.y这个量,在上滑和下滑时,变化极小(小数),但是因为方向不同,有正负之分,这就很好处理了。
2.第一场景,不松手
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
CGFloat offsetY = scrollView.contentOffset.y + _tableView.contentInset.//注意
CGFloat panTranslationY = [scrollView.panGestureRecognizer translationInView:self.tableView].y;
if (offsetY & 64) {
if (panTranslationY & 0) { //下滑趋势,显示
[self.navigationController setNavigationBarHidden:NO animated:YES];
//上滑趋势,隐藏
[self.navigationController setNavigationBarHidden:YES animated:YES];
[self.navigationController setNavigationBarHidden:NO animated:YES];
<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c9<div class="crayon-num" data-line="crayon-5a46c9
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{&&&&CGFloat offsetY = scrollView.contentOffset.y + _tableView.contentInset.top;//注意&&&&CGFloat panTranslationY = [scrollView.panGestureRecognizer translationInView:self.tableView].y;&&&&&if (offsetY & 64) {&&&&&&&&if (panTranslationY & 0) { //下滑趋势,显示&&&&&&&&&&&&[self.navigationController setNavigationBarHidden:NO animated:YES];&&&&&&&&}&&&&&&&&else {&&//上滑趋势,隐藏&&&&&&&&&&&&[self.navigationController setNavigationBarHidden:YES animated:YES];&&&&&&&&}&&&&}&&&&else {&&&&&&&&[self.navigationController setNavigationBarHidden:NO animated:YES];&&&&}}
这里的offsetY & 64只是为了在视图滑过navigationBar的高度之后才开始处理,防止影响展示效果。
panTranslationY是scrollView的pan手势的手指位置的y值,这个方法是个人自己想到的,可能不是太好,因为panTranslationY这个值在较小幅度上下滑动时,可能都为正或都为负,这就使得这一方式不太灵敏,如果有更好的方法,欢迎留言交流。
5.动态缩放
这个效果纯粹是为了仿简书的个人信息的头像的缩放效果。
头像视图的布局直接利用了navigationBar的titleView,代码还是很好理解的,视图层级关系如下:
头像的一半是“悬空”的。
缩放只是滑动代理监听时的一个动态缩放的过程,缩放率同之前说的alpha的动态变化一样,自行设置常量,这里注意缩放过程的分段执行,为了效果,这个有下拉放大回弹的效果,这部分不是简书的效果:
_topImageView.transform = CGAffineTransformMakeScale(1 - offsetY/300, 1 - offsetY/300);
_topImageView.transform = CGAffineTransformMakeScale(1 - offsetY/300, 1 - offsetY/300);
如果只是设置缩放,效果如下:
为了使缩放过程中位置相对保持,之前想到了改变锚点的方式,然而效果很差,最终还是以简单的方式实现:
CGRect frame = _topImageView.
frame.origin.y = 5;
_topImageView.frame =
<div class="crayon-num" data-line="crayon-5a46c<div class="crayon-num crayon-striped-num" data-line="crayon-5a46c<div class="crayon-num" data-line="crayon-5a46c
CGRect frame = _topImageView.frame;frame.origin.y = 5;_topImageView.frame = frame;
就是保持y的坐标为初始值。
下面的这个仿微博的效果,也是基于同样的原理,只是要注意图层关系,详细参考代码,不再赘述。
6.侧滑返回
这算是个比较大的话题了,前面提到的那篇文章中有关于此的详细论述,这里只是简单提及,稍后有机会,会专门写一篇关于侧滑返回的自定义实现。
iOS7之后,navigationController推出的视图,只要返回按钮不自定义覆盖,或者相关属性默认,右滑屏幕左边缘,可以直接pop返回,这是个十分方便的功能。关于实现和自定义实现,网上也有太多的文章。这里只是说明一点,就是在设置navigationBar透明之后,使用侧滑返回的过程中,navigationBar会突然出现,显得十分突兀,这也是目前微博APP的效果,QQ和微信都针对此做了不同的处理,本文的Demo中也尝试做了一定的处理,但是效果并不是十分理想的,就是中断侧滑返回动作时,navigationBar闪的问题。这个问题已经超出本文内容的范围,有机会会在今后的文章中介绍。
参考文章:
可能感兴趣的话题
o 103 回复
关于iOS频道
iOS频道分享iOS和Swift开发,应用设计和推广,iOS相关的行业动态。
新浪微博:
推荐微信号
(加好友请注明来意)
&#8211; 好的话题、有启发的回复、值得信赖的圈子
&#8211; 分享和发现有价值的内容与观点
&#8211; 为IT单身男女服务的征婚传播平台
&#8211; 优秀的工具资源导航
&#8211; 翻译传播优秀的外文文章
&#8211; 国内外的精选文章
&#8211; UI,网页,交互和用户体验
&#8211; 专注iOS技术分享
&#8211; 专注Android技术分享
&#8211; JavaScript, HTML5, CSS
&#8211; 专注Java技术分享
&#8211; 专注Python技术分享
& 2017 伯乐在线

我要回帖

更多关于 ios 导航栏半透明效果 的文章

 

随机推荐