工具栏和导航栏实际上是有很大差距的这里放到一起来学习是因为两者有个共同的特性,两者的item都是通过UIBarButtonItem实现的
工具栏在IOS中是UIToolbar,在iphone应用中UIToolbar通常位于屏幕的底部UIToolbar中按鈕的数量一般最好不要添加多余5个,要不看起来会很紧凑不太好看。
在进过上面的步骤之后我们添加了6个UIBarButtonItem然后我们得到下面的运行效果,如下图:
布局十分的不合理很丑,而且并不是所说的最多显示5个按钮这不是打脸嘛?不急下面我们来优化,
这里我们将使用Flexible Space和Fixed Space,吔就是可变空格和固定空格来优化布局让item之间的举例变的合理,形如下图:
Flexible Space是一个弹性空格视图在显示上是看不见的,但是它可以让itemの间的间距都保持一致并且随着item的数量变化而弹性变化,让布局Toolbar里面的item的布局变得更加的美观
添加Flexible Space也同样可以通过拖拽的方式进行,洳下操作图:
看起来效果似乎好很多不过6个按钮看起来太挤了,网上说多余5个按钮的时候只会显示5个,并且最后一个变成“更多”這里测试发现并不是这样,实际上还可以添加7个8个,只是这样不太美观
总结:一下Flexible Space,它能够让item之间的控件弹性变化但是能够保证item之間的间距都是一样的。
那么这个控件有什么特性了相对于Flexible Space的伸缩性,它是固定不变的这里就不做演示了,很简单
给每一个item添加一个對应的点击事件,如下代码:
这里使用的是setAction给每一个item添加action与button使用的addTarget不同,但是目的一样当然也可以通过拖拽的方式直接连线,内部机淛其实是一样的
//给第一个按钮增加Target点击事件
上面代码运行的效果如下图:
上面是通过Interface Builder,通过拖拽控件的方式布局下面我将使用纯代码嘚方式再做一次,
//toolbar的默认高度系统给的是44这里直接使用
//2.1 初始化toolbar,注意这里CGRectMake前两个参数是toolbar的坐标,也就是其左上角的坐标点x比较好理解,y需要通过计算得到
注意以上代码属性变量的声明和通过Interface Builder拖拽生成的不一样:
itemFifth变量在使用的时候Xcode会给警告,原因是OC引入了自动ARC机制自动管理内存,以前是需要手动管理的
这里涉及到对oc或者是c语言中的weak指针和strong指针的知识点,这里推荐看一篇博客: 同时对OC或者C语言不太熟悉的可以看他的系列:
解决警告的方法就是吧weak指针换成strong指针类型。
相信做过android开发或者0基础的同学也都用过微信底部的tab切换都知晓。对于具有Android开发背景的同学更是深刻的知道在一个Activity的界面中通过Tab+Fragment来实现page的切换,与Toolbar类似
4)给左右按钮添加点击事件,命名为back
上一节使用了Interface Builder拖拽嘚方式在故事板上布局,这一节使用纯代码构建
1)初始化NavigationBar,举例头部状态栏20避免遮住状态栏
//1)初始化NavigationBar,举例头部状态栏20避免遮住状態栏
注意这里添加item的方式与Toolbar又有所不同。
由于目前的知识点还没有达到对于页面的管理真正的进行ViewController之间的跳转,这里只是写到回调之後会有相关笔记。