7.2、初识导航

导航基础
import UIKit

class OtherViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = UIColor.cyan
        //1、导航控制器中间title,两种方法都可以
//        self.title = "One"
        self.navigationItem.title = "One"
        //2、导航条中间出了显示文字,还可以显示任意视图,显示图片
//        let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 40, height: 40))
//        self.view.addSubview(imageView)
//        imageView.image = #imageLiteral(resourceName: "qd.png")
//        imageView.contentMode = .scaleAspectFit
//        self.navigationItem.titleView = imageView

        //3、导航控制器中间title颜色
        self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.purple]
//        self.navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont.systemFont(ofSize: 30), NSForegroundColorAttributeName: UIColor.black]

        //4系统按钮edit
        let rightItem = UIBarButtonItem(barButtonSystemItem: .edit, target: self, action: #selector(pushTwoAction))
        //4.1设置右边按钮
        self.navigationItem.rightBarButtonItem = rightItem
        //这个属性不能修改标题文字的颜色
        //能够修改左右按钮的文字颜色
        self.navigationController?.navigationBar.tintColor = UIColor.red
//4.2自定义标题按钮
        let leftBtn = UIBarButtonItem(title: "分类", style: .plain, target: self, action: #selector(clickLeft(_:)))
        //self.navigationItem.leftBarButtonItem = leftBtn
        
        //4.3自定义图标按钮
        let images = UIImage(named: "2")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)//注意图片显示方式
        let navImageBtn = UIBarButtonItem(image: images, style: .plain, target: self, action: #selector(clickLeft2))
        self.navigationItem.leftBarButtonItems = [leftBtn, navImageBtn]
        
        let DeviceWidth = UIScreen.main.bounds.width
//        let DeviceHeight = UIScreen.main.bounds.height
        let bu = UIButton(frame: CGRect(x: 0, y: 100, width: DeviceWidth, height: 50))
        self.view.addSubview(bu)
        bu.setTitle("下一页", for: .normal)
        bu.backgroundColor = UIColor.brown
        bu.addTarget(self, action: #selector(presnetAction), for: .touchUpInside)
//        4.4适配普通机型与X
        let navHeight = UIApplication.shared.statusBarFrame.size.height + 44.0
        print(navHeight)
        bu.frame = CGRect(x: 0, y: navHeight, width: DeviceWidth, height: 50)
        
//        let tabHeight = UIApplication.shared.statusBarFrame.size.height>20?83:49
        
    }
//    模态跳转
    func presnetAction() {
        let two = TwoViewController()
        let nextNav = UINavigationController(rootViewController: two)
        /*
         视图控制器翻转效果
         由下向上推出(默认模式) CoverVertical
         水平翻转 FlipHorizontal
         淡入淡出 CrossDissolve
         翻页效果 PartialCurl
         注意:如果有导航视图控制器时,翻转效果设置在导航视图控制器;没有时则设置在视图控制器。
         */
        nextNav.modalTransitionStyle = .crossDissolve
        self.present(nextNav, animated: true, completion: nil)
    }
    func clickLeft2(){
        print("clickLeft2")
    }
    //导航跳转,参数是UIBarButtonItem类型的对象
    func clickLeft(_ btn: UIBarButtonItem){
        print("clickLeft")
        let two = TwoViewController()
        self.navigationController?.pushViewController(two, animated: true)
    }
//    自定义动画
    func pushTwoAction(){
        let two = TwoViewController()
        //1、push方法
        // 转场动画1
        UIView.beginAnimations(nil, context: nil)
        UIView.setAnimationCurve(UIViewAnimationCurve.easeInOut)
        UIView.setAnimationDuration(0.6)

        self.navigationController?.pushViewController(two, animated: true)
        UIView.setAnimationTransition(UIViewAnimationTransition.curlUp, for: self.navigationController!.view, cache: false)
        UIView.commitAnimations()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}

//
//  TwoViewController.swift
//  Nav
//
//  Created by hushuzhen on 2017/7/11.
//  Copyright © 2017年 swifts. All rights reserved.
//

import UIKit

class TwoViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.gray
        self.title = "Two"
    

//        1.导航栏是否隐藏
        self.navigationController?.navigationBar.isHidden = false
//        2.导航栏隐藏左边backitem,即leftbarbuttonitem
        //完全隐藏backItem//
        self.navigationItem.setHidesBackButton(true, animated: true)
//        3.导航栏leftbarbuttonitem的颜色设置
        self.navigationController?.navigationBar.tintColor = UIColor.black
//        8.导航栏重新定义leftbarbuttonitem
        //重新定义backItem,将覆盖原来的BackItem.与storyboard中拖入一个item,效果一样。都是覆盖原来的backitem。
//        导航返回按钮,不做任何设置,系统默认上一页标题
//        第一种代码定义方式,设置系统按钮
//        self.navigationItem.setLeftBarButton(UIBarButtonItem(barButtonSystemItem: .camera, target: self, action: #selector(backToOneVC)), animated: true)
        
        //第二种代码定义方式,初始化自定义
//        self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.add, target: self, action: #selector(backToOneVC))
        
//        第三种代码定义的方式,自定义文字按钮
        self.navigationItem.setLeftBarButton(UIBarButtonItem(title: "< 返回", style: .plain, target: self, action: #selector(backToOneVC)), animated: true)
        //        4.导航栏leftbarbuttonitem的字体,颜色,大小设置
        self.navigationItem.leftBarButtonItem?.setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.blue,NSFontAttributeName: UIFont(name: "Chalkduster", size: 15)!], for: .normal)
//        第四种自定义图片为左按钮
//        let leftBtns = UIBarButtonItem(image: UIImage.init(named: "2")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal), style: .plain, target: self, action: #selector(backToOneVC))
////        //消除左边的间隙
//        let space = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
//        space.width = -10
//        self.navigationItem.leftBarButtonItems = [space,leftBtns]
        //        9.导航栏设置成透明
        //将导航栏设置成透明
        //        2.导航栏的最底部颜色设置
        //backgroundColor 是最底下的color
        self.navigationController?.navigationBar.backgroundColor = UIColor.yellow
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
//        self.navigationController!.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.isTranslucent = true

        self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: #selector(comeToNext))
    }
        func backToOneVC() {
            //2、pop方法
        self.navigationController?.popViewController(animated: true)
//        返回根视图self.navigationController?.popToRootViewControllerAnimated(true);
    }
    func comeToNext() {
        print("点击写一页")
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

UIViewController扩展


import UIKit

extension UIViewController{
    //自定义导航栏
    func changeSystemNav() {
        //隐藏系统的导航栏 不然点击事件受到影响
        self.navigationController?.isNavigationBarHidden=true
        
        // 创建一个导航栏
        let navBar = UINavigationBar(frame: CGRect(x:0, y:20, width:self.view.frame.size.width, height:60))
        // 导航栏背景颜色
        navBar.backgroundColor = UIColor.blue
        //这里是导航栏透明
        //navBar.shadowImage = UIImage()
        //navBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
        
        // 自定义导航栏的title,用UILabel实现
        let titleLabel = UILabel(frame: CGRect(x:0,y:0,width:50,height:60))
        titleLabel.text = "LOG IN"
        titleLabel.textColor = UIColor.red
        //这里使用系统自定义的字体
        //titleLabel.font = UIFont(name: "Roboto-Medium", size: 16)
        
        // 创建导航栏组件
        let navItem = UINavigationItem()
        // 设置自定义的title
        navItem.titleView = titleLabel
        
        // 创建左侧按钮
        let leftButton = UIBarButtonItem(title: "leftButton", style: .plain, target: self, action: nil)
        leftButton.tintColor = UIColor.red
        
        // 创建右侧按钮
        let rightButton = UIBarButtonItem(title: "rightButton", style: .plain, target: self, action: nil)
        rightButton.tintColor = UIColor.red
        
        // 添加左侧、右侧按钮
        navItem.setLeftBarButton(leftButton, animated: false)
        navItem.setRightBarButton(rightButton, animated: false)
        
        navigationItem.setHidesBackButton(true, animated: false)
        // 把导航栏组件加入导航栏
        navBar.pushItem(navItem, animated: false)
        
        // 导航栏添加到view上
        self.view.addSubview(navBar)
    }
    
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

  • 1、什么是初始化 & 什么是反初始化? 1、初始化 什么是初始化?初始化是用来为对象设定初始状态的方法。 2、反初...
    NetWork小贱阅读 297评论 0 0
  • 青春热烈, 在很短的时光里, 任你浮浪成蝶。 人生蹉跎, 在余下的岁月中, 不寻对与错, 再不慌张成花容失色……
    天山木兰阅读 112评论 0 0
  • 集体智慧 时间:2018年6月11号上午11点到11点半 参加人:晶晶,舒嫣,丽琴,齐文,老山羊 主题:如何摆脱愧...
    齐文系统排列阅读 1,144评论 0 0
  • 今天老师们没布置作业,因为明天要考试了,让自己自由复习,而作为家长的我,却无从下手,总觉的这也不行,那也不行,就由...
    隋青青阅读 190评论 0 4