swift实作app 交流分享七(修改導覽列)

来源:互联网 发布:ios去广告软件 编辑:程序博客网 时间:2024/06/08 19:28

一行代码一场梦,大家好我是阿达!今天跟大家分享的部分是『自订导览列外观』。以下是我们将要改变的部分:


变更导览列的背景颜色

变更导览列的字型

自订返回按钮的颜色

变更返回键的标题


自从 iOS5之后 Apple 导入外观 API UIApperance 让开发者可以很轻易的自订大部份的 UIKit 控制元件的外观,包含整个应用程式的导览列。想要自订导览列的外观,你可以使用 appearance() 来取得类别的外观代理 (appearance proxy):


想要修改导览列的背景颜色,设定 barTinColor属性为你喜爱的颜色:

//修改导览列的颜色

UINavigationBar.appearance().barTintColor = UIColor (red: 231.0 / 250, green: 95.0 / 250, blue: 53 / 250, alpha: 0.3)


把他加在 AppDelegate.swift  didFinishLaunchingWithOptions方法中。




接下来是标题的样式可以借由 titleTextAttribustes 属性的设定来做变更:


               //改变标题样式


        if let barFont = UIFont (name: "AvenirNextCondensed-DemiBold", size: 22.0){

        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor(), NSFontAttributeName:barFont]

        }




以上这段程序在说明,我们指定 AvenirNextCondensed-DemiBold为字型,并将颜色设定为白色。


很抽象吗? 没事的,按下 command + R 吧!








 我们看看左上角的返回键,现在还是显示着『Food Pin』的标题。如果今天我们想让画面更简洁一点,把提移除呢?


让我们进到 RestaurantTableViewController中的viewDidLoad去修改:


        //移除返回按鈕標題清空

        

        self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)


加好了之后,当然就是快乐的command + R啦! 




恩~ 真的是干净了很多,可是蓝色的按钮,跟橘色的底。。。真的很不搭。。。有办法解决吗?


当然有的!我们回到 AppDelegate.swift中继续在didFinishLaunchingWithOptions方法中,加入以下程式:


//將按鈕改成白色

         UINavigationBar.appearance().tintColor = UIColor.whiteColor()


別懷疑~接下來就是 command + R 





恩~ 看起来真的顺眼多了,如果我们想多做一些改变,我们看到导览列上一片空白,感觉如果如果让他显示我们所点选的餐厅是不是更好?

这超级容易的呢!只要设定细节视图的标题为餐厅名称就可以啦!,我们把以下的程式码插入, DetailViewController viewDidLoad 当中:


        //顯示餐廳名字在導覽列上

        title = self.restaurant.name


恩~相信大家都知道,command + R  按下去,见证奇迹吧!




就是这么轻易,就是这么容易,让我们的app变得更有设计感。



接下来要跟大家分享的是,关于隐藏导览列,没错,你没听错,我们接下来要做的就是隐藏导览列。有的时候我们会需要更多的画面在你的主画面上,而上面的导览列就占了很多部分,在以前如果要隐藏导览列的话,我们必须要有自己的解决方案,iOS8 推出了让你可以用滑动或是点击的方式来隐藏导览列。


Storyboard Navigation Controller  Scene 下面选取 Navigation  Controller』,在里面有一个叫做『On Swipe』。启动了之后当你的画面往下拉,就会发现上面的导览列不见了,当你滑回去之后会发现他又出现了。


這樣的確很方便,但是會有兩個問題,第一就是導覽回表格視圖控制器之後,無法隱藏。 第二個問題就是細節視圖的導覽列不見了。


要解决这个方法其实很简单,针对第一个问题,因为 ViewDidLoad 只有当视图第一次被载入的时候才会呼叫,第二次之后就不会呼叫了,之后第二个问题因为隐藏的导览列被带到下一页的细节部分。




所以我们必须告诉 App要重新显示导览列。幸好,UIViewController 提供了几个方法来回应视图事件。不像 viewDidLoad,这些方式在每次视图显示或移除的时候都会被呼叫。当视图显示的时候, viewWillAppear viewDidLoad 就会被呼叫。不同点在于说,当画面要准备显示的时候,viewWillAppear 会被呼叫,当一个画面在画面显示的时候则呼叫 viewDidLoad


因此插入以下的程式到 RestaurantTableViewController.swift 中:


//處理導覽列

    override func viewWillAppear(animated: Bool) {

        super.viewWillAppear(animated)

        self.navigationController?.hidesBarsOnSwipe = true

    }



针对细节的导览列的修改,我们要在 DetailVIewController.swift 加入以下程式:


    //隱藏導覽列

    

    override func viewWillAppear(animated: Bool) {

        super.viewWillAppear(animated)

        self.navigationController?.hidesBarsOnSwipe = false

        self.navigationController?.setNavigationBarHidden(false, animated: true)

    }


完成了之后按下 command + R来看看结果



现在我们看到的状态列包括『电信业者』『wifi讯号』『时间』『电池状态』。这些都是黑色的,如果可以让他变成白色的,整体感是不是更好?


在早期的 iOS版本中,状态列永远是黑色的,无法改变。iOS7 释出之后,允许开发者改变每个视图控制器的状态列。我们将可以使用 UIStatusBarStyle来指定状态列内容是深色还是亮色,系统预设是深色系。就像现在我们看到的一样。


假如小伙伴想要把状态列的样式改成亮色系的,我们点选一个专案Food Pin  


加入一个叫做 view controller-based status bar appearance』的 key ,再将Value 设为 NO

之后我们再到 AppDelegate.swift里面的 didFinishLaunchingWithOptions方法,在里面加入以下的程式码:


 //將狀態列修改成亮色系

        UIApplication.sharedApplication().statusBarStyle = .LightContent


没错,我们成功地把状态列也修改成白色的了!今天分享的细节修改看起来很微小,但是小伙伴们将来在 App 送审核的时候,这些细节都有可能是被退件的理由。虽然之前承诺过小伙伴要用简单的方式来说明,但是阿达认为这些细节部分,有可能就是将来小伙伴们在排行版上高居不下的原因,让我们用一行一行的代码,一步一步的实现我们的梦想,我是阿达,我们下次见。 




0 0