1. UINavigationController管理一个VC的栈,栈底的VC叫做这个UINavigationController的root view controller.
  2. 有一个函数叫做popToRootViewController(animated:),就是返回rootVC。
  3. UINavigationController在顶部有一个navigationBar,继承自UIView。它的frame,bound及alpha值都不能改变。隐藏或者显示这个navigationBar要调用UINavigationController的setNavigationBarHidden(_:animated:)方法。其中动画的时间是一个常量UINavigationControllerHideShowBarDuration,不能改变。

    To show or hide the navigation bar, you should always do so through the navigation controller by changing its isNavigationBarHidden property or calling the setNavigationBarHidden(_:animated:) method.

                self.navigationController?.setNavigationBarHidden(false, animated: true)
    self.navigationController?.navigationBarHidden
  4. navigationBar的各个属性

  5. navigationBar的背景色

    self.navigationController?.navigationBar.barTintColor = UIColor.yellowColor()

  6. navigationBar的配置
    navigationBar有左、中、右三个部分。显示的具体内容是根据当前VC的UINavigationItem属性及栈中前一个VC的UINavigationItem属性配置的。

  7. UINavigationItem
    UINavigationItem作为VC的属性,在这个VC处于navigation stack时,用来设置定于导航条的样式等等。属性分别用来设置导航条左、中、右的样式等。

    • 左边

      • leftBarButtonItem 最左边的按钮
      • leftBarButtonItems 最左边的按钮们(可以有多个)
      • setLeftBarButtonItems(_:animated:)
      self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(title: "left", style: .Plain, target: self, action: #selector(TGVCButtom.leftButtonClicked(_:)))
      self.navigationItem.leftBarButtonItem?.tintColor = UIColor.brownColor()
      let dict = [NSForegroundColorAttributeName : UIColor.blueColor(),
      NSKernAttributeName: NSNumber.init(int: 10)
      self.navigationItem.leftBarButtonItem?.setTitleTextAttributes(dict, forState: .Normal) let sencondleftBarButtonItem = UIBarButtonItem.init(title: "leftSecond", style: .Plain, target: self, action: #selector(TGVCButtom.secondLeftButtonClicked(_:)))
      self.navigationItem.setLeftBarButtonItems([self.navigationItem.leftBarButtonItem!,sencondleftBarButtonItem], animated: true)

    • 中间

      • title

        self.navigationItem.title = "buttomVC"
      • titleView
        会覆盖title。如果需要设置button、富文本可以考虑这个

        Custom title views are centered on the navigation bar and may be resized to fit

        self.navigationItem.titleView = UIImageView.init(image: TGResizeImage(UIImage.init(named: "cat"), byRatio: 0.5) )
    • 右边。和左边类似。

      • rightBarButtonItem
      • rightBarButtonItems
      • setRightBarButtonItems(_:animated:)
    • 返回按钮

      有时候既要有一个返回的按钮,又要有一个左边的按钮。达到微信的网页常有的返回+关闭的效果。

      假设一个当前VC是A,push一个VC出去。

      self.navigationController?.pushViewController(self.topVC, animated:true)

      那么需要

      1. 设置自己的backBarButtonItem

        self.navigationItem.backBarButtonItem = UIBarButtonItem.init(title: "back", style: .Plain, target: nil, action: nil);
      2. 设置topVC的leftBarButtonItem

        self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(title: "leftButton", style: .Done, target: self, action: nil)
      3. 设置topVC的两个变量

        self.navigationItem.hidesBackButton = false //返回按钮没有被隐藏
        self.navigationItem.leftItemsSupplementBackButton = true //返回按钮可以和左边的按钮一起出现

  8. 奇怪的prompt

    A single line of text displayed at the top of the navigation bar

        self.navigationItem.prompt = "promt"//不知道干嘛的。。有啥用呢

  9. 一个解释

  10. 如何禁止左滑返回

    self.navigationController?.interactivePopGestureRecognizer?.enabled = false

UINavigationController及顶部导航条的更多相关文章

  1. uni-app自定义导航栏按钮|uniapp仿微信顶部导航条

    最近一直在学习uni-app开发,由于uniapp是基于vue.js技术开发的,只要你熟悉vue,基本上很快就能上手了. 在开发中发现uni-app原生导航栏也能实现一些顶部自定义按钮+搜索框,只需在 ...

  2. HTML实例-02-京东顶部导航条

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  3. css实现京东顶部导航条

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  4. Bootstrap 固定在顶部导航条

    @{    Layout = null;}<!DOCTYPE html><html><head>    <meta name="viewport&q ...

  5. Bootstrap组件之响应式导航条

    响应式导航条:在PC和平板中默认要显示所有的内容:但在手机中导航条中默认只显示“LOGO/Brand”,以及一个“菜单折叠展开按钮”,只有单击折叠按钮后才显示所有的菜单项. 基础class: .nav ...

  6. Swift - 导航条(UINavigationBar)的使用

    与导航控制器(UINavigationController)同时实现导航条和页面切换功能不同. 导航条(UINavgationBar)可以单独使用,添加至任何的UIView中.UINavigation ...

  7. android开发(1):底部导航条的实现 | navigation tab | activity的创建

    底部导航条,在iOS中叫tabbar,在android中叫bottombar或bottom navigation,是一个常用的切换页面的导航条. 同样,如果有良好的第三方库,我们应该优先考虑,能用好别 ...

  8. 基于jQuery实现页面滚动时顶部导航显示隐藏效果

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  9. UINavigationController导航条是否挡住下面的内容

    控制 UINavigationController 导航条是否挡住下面的内容 if ([[[UIDevice currentDevice] systemVersion] floatValue] > ...

随机推荐

  1. iOS无网络提示或无数据提示空白页

    在我们平常我们用的app当中,当你在信号不好网络错误的时候,一般都会有个提示:“网络错误请点击重试~” 的话术,或者说当你浏览某一页的时候,没有数据,也会提示:“暂无数据,请搞点动静” 之类的话术. ...

  2. Opencv Convex Hull (凸包)

    #include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namespace cv; ...

  3. 电商项目面试题 及mysql面试题 太难没啥用

    需要按照功能点把系统拆分,拆分成独立的功能.单独为某一个节点添加服务器.需要系统之间配合才能完成整个业务逻辑.叫做分布式.集群:同一个工程部署到多台服务器上.优点:1.把模块拆分,使用接口通信,降低模 ...

  4. Nginx 事件基本处理流程分析

    说明:本文章重点关注事件处理模型.有兴趣的同学可以去http://tengine.taobao.org/book/查找更多资料.Tengine应该是淘宝基于Nginx自己做的修改.这个地址的文档还在不 ...

  5. code3731 寻找道路

    将图反向,从终点spfa,把和终点没有联系的点找出来, 把它们和它们所连接的所有点删去(反向图) 然后再一遍spfa,输出最短路即可 代码: #include<iostream> #inc ...

  6. Mac/win下的docker容器和LAMP环境的安装(亲测)

    docker直接在官网下载就行了无需赘述 接下来就是在终端中运行docker docker ps 显示当前运行的容器 docker images 显示以及装在的镜像 接下来我们安装centos镜像 d ...

  7. 实践作业4---DAY3阶段二。

    第二阶段是用户调研,我们小组选择了一个5班的同学,作为采访对象.采访比较详实,但是样本太少,不太有说服力. 具体采访详情如下: 问:请问您使用喜欢发表Blog么? 答:肯定有啊. 问:都用什么网站发表 ...

  8. STL扩展容器

    string | array | hash 1. string - 可以视为以字符为元素的一种容器, 可以在字符上进行遍历, 提供begin()/end() - 为了支持迭代器和迭代器适配器 , st ...

  9. 关于Manifest merger failed : uses-sdk:minSdkVersion 8 cannot be smaller than version 16 declared in lib

    日志有些长,标题显示不完,截图如下: 有图可以知道,是因为在引入的libary里面的build.gradle文件里面的minSdkVersion不一致导致这个问题出现的.修改一致即可.这个问题是在co ...

  10. [GO]使用bufio的文件读取方式

    package main import ( "os" "fmt" "bufio" "io" ) func ReadFil ...