大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
导航栏不同于其他view,简单的设置alpha并不能达到预想的效果。我在多次尝试之后得出一个最有效的方式。
在黔江等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站制作、成都网站设计、外贸营销网站建设 网站设计制作按需规划网站,公司网站建设,企业网站建设,高端网站设计,营销型网站建设,成都外贸网站建设,黔江网站建设费用合理。
简单的让导航栏变透明只需要设置下面三个属性:
但是这样做有个问题,就是返回按钮和title一起变透明了,解决方法是不要通过alpha来改变透明度,而是通过改变backgroundImage的透明度来实现。如何改变图片的透明度呢,送上一个方法,你只需要创建一个UIImage的分类,实现这个方法,在需要的时候引入这个分类就可以使用了。
这样以来,你只需要将你需要的图片(也许是一张纯色)通过 setBackgroundImage:forBarMetrics: 方法设置为背景图片即可。
通过view的滚动实现一开始navigationBar隐藏,然后渐显的效果还难吗?
不过你可能发现,页面刚刚显示还没有滚动的时候,导航栏又不透明了,如果你不幸遇到这种状况,其实也很简单
是不是非常简单?喜欢的话记得点红心♥️啊。也欢迎评论与我交流????
Swift版导航栏适配参考
在iOS 13中给导航的 UINavigationBar 增加了 scrollEdgeAppearance 属性应用在iOS 14及更早版本的大标题导航栏上,在iOS 15中 scrollEdgeAppearance 属性适用于所有的导航栏
官方解释:描述当关联的UIScrollView到达与导航条相邻的边缘(导航条的上边缘)时要使用的导航条的外观属性。如果没有设置,将使用修改后的standardAppearance
scrollEdgeAppearance 与 standardAppearance 一样同属于 UINavigationBarAppearance 类型 父类是 UIBarAppearance
其中影响导航栏颜色、阴影涉及到以下属性
因为 scrollEdgeAppearance = nil ,当前控制器如果使用有 ScrollView 类的控件,当 ScrollView 向上滚动时 scrollEdgeAppearance 会默认使用 standardAppearance 的属性效果。所以 backgroundEffect 和 shadowColor 属性需要显式设置为nil,以防止 backgroundEffect、shadowColor 有颜色值影响导航栏透明效果。
下一篇:Swift版导航栏适配
PERFECT!
在点击push下一个页面时,因为各种原因,点一下cell或按钮没有响应,用户可能就多点几下,这时候会打开好几个一样的页面。
这是因为push后的页面有耗时操作或者刚好push到另一个页面时,另一个页面正好在reloadData卡住主线程。造成点击cell时卡住了。
这时,我们可以通过重写导航控制器的方法来解决这个问题。
#import UIKit/UIKit.h
@interfaceNaviViewController : UINavigationController
@end
#import "NaviViewController.h"
@interfaceNaviViewController ()
// 记录push标志
@property(nonatomic,getter=isPushing)BOOLpushing;
@end
@implementationNaviViewController
- (void)viewDidLoad {
[superviewDidLoad];
self.delegate=self;
}
- (void)pushViewController:(UIViewController*)viewControlleranimated:(BOOL)animated {
if(self.pushing==YES) {
NSLog(@"被拦截");
return;
}else{
NSLog(@"push");
self.pushing=YES;
}
[superpushViewController:viewControlleranimated:animated];
}
#pragma mark - UINavigationControllerDelegate
-(void)navigationController:(UINavigationController*)navigationControllerdidShowViewController:(UIViewController*)viewControlleranimated:(BOOL)animated {
self.pushing=NO;
}
@end