您的位置:首页 > 产品设计 > UI/UE

UINavigationControl

2015-08-15 20:46 411 查看
1.navigationBar导航条,可以用setBackgroundImage方法设置背景图片,当然图片多了可以使用clipsToBounds剪裁. 这点和UIView一样。

2.但,navigationBar是否隐藏和显示这个需要它爸也就是self.navigationController来控制,有直接.navigationBarHidden设置为YES/NO,也可以用方法setNavigationBarHidden,都能实现效果。

3.另一个重要的知识是对navigationItem的设置,这个属性和navigationController是平级的,所以直接可以用self.navigationItem使用。当然可用的有设置导航条标题的方法setTitle,当然你也可以直接把文字换成一个视图,即所谓的标题视图放在导航条的中间,用得方法是setTitleView

4.最重要的可能是给navigationItem设置左右两边的按钮,一般默认的在左边有“返回”,在右边的有“摄像头”(如微信朋友圈)。步骤就是创建一个UIBarButtonItem对象,然后直接把这个对象赋值给self.navigationItem.leftBarButtonItem或者右边的。当然也可以一次创建很多个UIBarButtonItem组成一个数组,然后把这个数组赋值给self.navigationItem.leftBarButtonItems,注意后面这个和前面这个相比,多了一个“s”,有很多个。也要注意一下有多个按钮时的排列顺序。显示顺序,左边:按数组顺序从左向右;右边:按数组顺序从右向左

5.自定义UIBarButtonItem   UIBarButtonItem *barBtn4=[[UIBarButtonItem alloc]initWithCustomView:view4];

6.我们也可以在子页中自定义一个返回按钮覆盖原先的"<back"

UIBarButtonItem *barBtn5=[[UIBarButtonItem alloc]initWithTitle:@"回家" style:UIBarButtonItemStylePlain target:self action:@selector(backTo)];  

    self.navigationItem.leftBarButtonItem=barBtn5; 
7. 每一个UIViewController对象里面都有一个指向导航控制器的指针,用以方便的获取它的导航控制器

    我们可以猜想,导航控制器对子视图控制器是强引用,而子视图控制器又有一个指针指向导航控制器,这个指针虽然指向了导航控制器,但它是弱引用

8.[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"header_bg64.png"] forBarMetrics:UIBarMetricsDefault];

    //图片太大会把状态栏充满。

9. 设置横屏下在导航条背景图片

    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"header_bg64"] forBarMetrics:UIBarMetricsCompact];

    // navBg-32.png

    给导航条增加背景图片,其中forBarMetrics有点类似于按钮的for state状态,即什么状态下显示

    UIBarMetricsDefault-竖屏横屏都有,横屏导航条变宽,则自动repeat图片

    UIBarMetricsCompact-竖屏没有,横屏有,相当于之前老iOS版本里地UIBarMetricsLandscapePhone

    UIBarMetricsCompactPrompt和UIBarMetricsDefaultPrompt暂时不知道用处,官方解释是Applicable only in bars with the prompt property, such as UINavigationBar and UISearchBar,以后遇到时再细说

10.  self.navigationController.navigationBar.backgroundColor = [UIColor purpleColor];   // 可以用,但是效果不好,受是否透明和self.view.backgroundColor的影响。

   

    if (kIOS7) {

        self.navigationController.navigationBar.barTintColor = [UIColor purpleColor];

        //不受是否半透明和self.view.backgroundColor的影响。

    } else {

        self.navigationController.navigationBar.tintColor = [UIColor purpleColor];

        //和navigationBar.backgroundColor一样易受影响

    }

    

    设置是否透明

    self.navigationController.navigationBar.translucent = NO;

    

    设置barStyle

    注意,barStyle会影响到状态栏的显示

    self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

11. title属性

    如果没有自定制返回按钮,下一个视图控制器的返回标题就是本控制的title

    如果title过分长,那下一个控制器的返回标题还是back

    跳转后实现下一界面SecondViewControl的title改变  必须在跳转之前改变self.title

    self.title = @"Root"; (self是viewControl)

12. 返回按钮需要注意的地方:

       A —— push -—> B

       .1 如果B视图控制器有一个自定义的左侧按钮(leftBarButtonItem),则会显示这个自定义按钮, 要自己实现返回操作;

        .2 如果B没有自定义按钮,但是A视图的backBarButtonItem属性有自定义项,则显示这个自定义项

        .3  如果前2条都没有,则默认显示一个后退按钮,后退按钮的标题是A视图的标题(注意当文字过长的时候,下一页的返回按钮就不会是当前的back,则会默认显示back), 如果没有标题,则默认有一个back

          如果即想要系统的返回箭头,又想只改变其标题怎么办?

A -> PUSH -> B

解决办法1. 可以把一张图放到button上,然后设置leftBarButtonItem, 一般都是这么处理的

解决办法2(歪门斜道). 设置上一个视图控制器(A)的backBarButtonItem

B *b = [B alloc];

UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"回去!" style:UIBarButtonItemStylePlain target:nil action:nil];

[self.navigationItem setBackBarButtonItem:backItem];

[backItem release];

[self.navigationController pushViewController:b animated:YES];

          如果不用系统的返回箭头,用自己的图片当作返回箭头 怎么办?

不能不能用 UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithImage:[UIImage   imageNamed:@"back.png"]    style:UIBarButtonItemStylePlain
target:nil action:nil]; 这个没有用处

    应该用:

    [[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"back.png"]];

    [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"back.png"]];

    而且图片的颜色是由tintColor属性控制的.

 13.设置Navigation Bar颜、Item颜色、title颜色

if (IS_IOS_7_Later) {

        [[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]]; //iOS后才出现

        [[UINavigationBar appearance] setTintColor:[UIColor blackColor]];

    } else {

        [[UINavigationBar appearance] setTintColor:[UIColor blackColor]];

    }

    

    

    [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:

                                                           [UIColor blackColor], NSForegroundColorAttributeName, TextFontWithSize(17), NSFontAttributeName, nil]];

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS UI 导航