美文网首页iOS开发实战笔记
iOS 开发实战小知识(七) —— UINavigationBa

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

作者: Eddiegooo | 来源:发表于2017-12-19 17:54 被阅读5次

    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() 方法中也可以

    相关文章

      网友评论

        本文标题:iOS 开发实战小知识(七) —— UINavigationBa

        本文链接:https://www.haomeiwen.com/subject/wgjiwxtx.html