iOS开发实战笔记

iOS 开发实战小知识(七) —— UINavigationBa

2017-12-19  本文已影响5人  Eddiegooo

1.导航相关

// 设置一个空的背景图片,实现导航栏透明但是 BarButtonItem 正常显示
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];

// 设置一个空的 shadowImage 来去掉NavigationBar 最下面的那条线
self.navigationController.navigationBar.shadowImage = [UIImage new];

//随着上拉距离的改变,实现其透明度动态变化
// 实现:监听 scrollView 的 offset值,然后获取到 NavigationBar的子控件,动态改变其透明度

[[self.navigationController.navigationBar subviews] objectAtIndex:0].alpha = 0;

2.奇葩需求

有个需求是A push 到 B, B push 到 C, C * “pop” 到 D,D 再 “pop”到 A, 傻逼不???*

//实现吧:首先 A push 到 B

[self.navigationController pushViewController:B animated:YES];
//此时 self.navigationController.childViewControllers = [A, B];

//然后 B push 到 C

[self.navigationController pushViewController:C animated:YES];
// 此时 self.navigationController.childViewControllers = [A, B, C];

//现在要实现 C pop 到 D,由于navigationController.childViewControllers是只读的,因此不能直接对其进行操作。。。

// 这时候可建立可变拷贝对象,然后进行替换操作,是不是很聪明啊 😆

NSMutableArray *navChildMuarr = [self.navigationController.childViewControllers mutableCopy];
[navChildMuarr replaceObjectAtIndex:1 withObject:D];

// 最后再将替换后的数组赋值回去不要忘了

[self.navigationController setViewControllers:navChildMArr animated:YES];

备注:上面这串代码:写在 B push C 之后或者写在 C 的 viewDidLoad() 方法中也可以
上一篇下一篇

猜你喜欢

热点阅读