惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
Google Developers Blog
F
Full Disclosure
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Threat Research - Cisco Blogs
A
Arctic Wolf
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
博客园 - 【当耐特】
AWS News Blog
AWS News Blog
U
Unit 42
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
T
Tor Project blog
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Recorded Future
Recorded Future
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
Latest news
Latest news
GbyAI
GbyAI
S
SegmentFault 最新的问题
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
Hacker News: Ask HN
Hacker News: Ask HN
美团技术团队
N
News | PayPal Newsroom
J
Java Code Geeks
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
The Hacker News
The Hacker News
The GitHub Blog
The GitHub Blog
V
V2EX
N
News and Events Feed by Topic
T
Troy Hunt's Blog
Security Latest
Security Latest
博客园 - 叶小钗
P
Palo Alto Networks Blog

博客园 - zhoup

文鹏教育_jmeter培训_逻辑控制器_循环取样器 02 jmeter性能测试系列_JForum测试论坛的环境搭建 01 jmeter性能测试系列_Jmeter的体系结构 NSTimer的使用[zhuang] 实战p12文件转pem文件 UIViewContentMode各类型效果 给iOS开发新手送点福利,简述文本属性Attributes的用法 IOS 设置导航栏全局样式 iOS 在tableView上添加button导致按钮没有点击效果和不能滑动的 zhuang xcode 插件地址 AFNnetworking详解 NSRunLoop详解 利用SQL注入漏洞登录后台的实现方法 Xcode 7免证书真机调试 [转]CABasicAnimation用法 zhuang 定制iOS 7中的导航栏和状态栏 zhuang 自定义Xcode代码模板:Code Snippet [zhang] ViewController的生命周期分析和使用 iOS开发--一些UITabBarItem属性的设置[转]
UINavigationItem UINavigationBar 关系分析[转]
zhoup · 2015-11-27 · via 博客园 - zhoup

http://blog.csdn.net/luoyeffcs/article/details/16106707

目录

1.关系分析

2.关系综述

3.概念点

4.疑问

1.关系分析

UIBarItem-> UIBarButtonItem -> UINavigationItem

1.1 UIBarItem:

UIBarItem类是一个可以放置在Bar之上的所有小控件类的抽象类。继承了该基类所有子类在外观上类似于一个Button,它们都有一个标题,图片,动作以及目标,这点可以从其子类的初始化方法处看到。

1.2 UIBarButtonItem:

专门用来放在UIToolbar 或者 UINavigationBar的特殊button.基本行为跟button是一样的。另外从IOS5开始的Customizing Appearance 增加了一系列的方法调整显示。

1.3 UINavigationItem: NSObject  

(包含了当前页面导航栏上需要显示的全部信息)

title,prompt,titleView,leftBarButtonItem,rightBarButtonItem,backBarButonItem

1.4 UINavigationBar :UIView

NavigaitonBar就是导航栏,位于屏幕的上方,管理整个NavigationControllernavigationItem,即类似navigationcontroller一样提供了一个栈来管理item

1.5 UINavigtionController :UIViewController

包含:viewcontrollersnavigationbartoolbar

1.6 navigationbarUIView

包含:items(UINavigationItem)

1.7 viewController

包含navigationitemtoolItem.  这两个属性控制了当前页面当前页面的navigationbartoolbar的外观。

2.关系综述

navigationcontroller直接控制viewcontrollers,然后包含的navigationbar形成整个nv的导航栏,bar并包含整个navigationItem的栈,管理整个nvnavigationitem NSArray *items 属性)。

navigationItem包含了bar视图的全部元素(如title,tileview,backBarButtonItem等),受当前viewcontroller管理,即bar形成整个nv的导航视图,然后每个nv页面的导航栏元素由所在页面的navigationItem管理。即设置当前页面的左右barbutton,用 self.navigationItem.leftBarButtonItem等。

3.概念点

3.1 

UINavigationController 是一个viewController

UINavigationBar 是一个view

UINavigationItem 是一个NSObject

UIBarButtonItem 是一个 UIBarItem,是一种专门放在bar上的特殊button

UIBarItem是一个NSObject,是是各种itme的父类

3.2 title

self.navigationItem.title,self.tabBarItem.title,self.title关系:

由于view controller本身包含navigationItemtabBarItem,所以可以单独对其title赋值,self.title会重写另外两个的值,只是提供的一种便利方法。

3.3 self.navigationItem,self.navigationController.navigationItem

self.navigationItem  是定制当前view 导航栏。根据当前的资料看,self.navigationController.navigationItem 是应该被忽视的属性,navigationcontroller继承与view controller,所以会有这个属性,但没有任何作用。

不过有人说,“They are Different. If you dynamically add UINavigationController, then you use self.navigationController.navigationItem.”但是没有得到验证,这点我也不认可。

3.4 navigationbar 高度 可更改

UINavigationBar *bar = [self.navigationController navigationBar];

    CGFloat navBarHeight = 70.0f;

    CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);

    [bar setFrame:frame];

3.5 navigationbar prompt

prompt 是一个NSString类型描述,注意添加该描述以后NavigationBar的高度会增加30,总的高度会变成74(不管当前方向是Portrait还是Landscape,此模式下navgationbar都使用高度44加上prompt30的方式进行显示)

如:

self.navigationItem.prompt=@"这是什么?";

self.title=@"HAH";


3.6 navigation barinteractivePopGestureRecognizer

navigation bar 可以修改barstyle transulucent,不能直接修改 frame,bounds,alpha等属性。可以通过initWithNavigationBarClass方法指定自己的navigationbar

IOS7 多了interactivePopGestureRecognizer,看资料说 ios7 UINavigationController 自动就加入了手势返回 前提是不能自定义leftBarButtonItem,自定义了leftBarButtonItem手势就失效了,待研究。

4.疑问

4.1控件都继承于uiview,都有tintcolorbackgroundcolor属性,那两者主要有什么区别呢?

4.2UIBarPosition UIBarMetrics 区别?