一天一点xib:7再聊SB

引言

我们再来聊聊SB

添加tableHeaderView和tableFooterVie

是的,没有听错,不用代码,“拖”出header于footer,其实很简单,选中tablView,在控件中找到View拖到tableView上,往最上方拖动,知道看到左右有两个圈的时候松手,这个View就是tableHeaderView了,同理,往最下方拖,就是tableFooterView。

一天一点xib:7再聊SB_第1张图片

LaunchScreen.storyboard

从iOS8开始iPhone多了4.7"和5.5"的两种设备,这使得适配更加复杂,特别是设置启动图,如果考虑到横竖屏的话,要做好多张图,最重要的是,启动图是最占体积的东西,为了更好、更方面的配置启动图,LaunchScreen.storyboard出现了,简单来说,启动的时候会加载这个SB文件,我们可以同过它更方便的设置启动图,可以用auto layout减少启动图数量的使用,但此功能只支持iOS8及其以上的系统。
那么问题来了,我要想适配更低的系统怎么办?答:不用。
如何禁止该功能?

一天一点xib:7再聊SB_第2张图片

size classes

size classes也是iOS8的新功能,.xib文件也是可以使用的,但大部分情况还是基于SB来使用,从xcode6开始我们新建的xib或SB文件中对应的View变成了正方形,而且下方显示"wAny hAny",点击后发现是可以选择的,选择不同的情况,View又变成了不同的形状,这就是size classes。简单的理解:size classes就是对设备的屏幕尺寸进行了抽象,宽高都分别用Regular、Compact来表示,我们其实不用太在意名称,只知道,以后不同的设备或者不同的状态(横竖屏)可以由这种描述来表示即可,具体的表示如下:

iPhone4S,iPhone5/5s,iPhone6,iPhone6s
竖屏:(w:Compact h:Regular)
横屏:(w:Compact h:Compact)
iPhone6P、iPhone6sP
竖屏:(w:Compact h:Regular)
横屏:(w:Regular h:Compact)

iPad
竖屏:(w:Regular h:Regular)
横屏:(w:Regular h:Regular)

由此我们可以看出,虽然把屏幕抽象了,但是用Regular、Compact并不能标识出各种不同的设备,竖屏情况下,所有iPhone用这种抽象表示是一样的(w:Compact h:Regular) ,所以:如果我们不适配横屏,或者iPad,只做竖屏iPhone显示的话,size classes并没有什么用,我个人认为目前的size classes应用面还是很窄的。

如果我们适配横屏,或iPad应该怎么做?
因为横屏后或者设备是iPad,那么size classes这种描述就会发生改变,而一旦描述发生改变,我们就能根据不同描述,做不同的布局,例如:我们在w:Compact h:Regular的情况下向View里拖了一个label,此时我们改变size classes为w:Regular h:Regular,你会发现该label不显示了,也就是说你在w:Compact h:Regular的情况下显示的label只在该情况下显示,这样就可以针对不同类型的描述,设置不同的UI布局了,除此之外,还可以给控件添加适配不同类型的描述。开启size classes功能后,选中控件的属性标签会发现,有些属性前有“+”的标志,点击这个标志就可以给这个控件的这个属性添加不同类型的描述了。

一天一点xib:7再聊SB_第3张图片

Storyboard Entry Point

如果我们用xcode6或者更高版本的xcode创建工程的话,你会发现自动就有了一个Main.storyboard

application:didFinishLaunchingWithOptions:中没有一行代码运行就没有问题,并不像之前那样,要创建window,指定rootViewController,这些是如何实现的?

一天一点xib:7再聊SB_第4张图片

xcode自动配置了一个SB文件,而以上的这一切都有xcode自动帮我们完成了。

那么问题来了:一个SB是可以对应多个VC的,他选哪个VC作为window的rootViewController?答案是Storyboard Entry Point,这个东西就是用来指定那个作为rootViewController的,也就是说,xcode会找到表示为Storyboard Entry Point的那个VC加载它成为rootViewController,而以后的跳转就由我们之前介绍的方式:

SecVC *secVC = [[UIStoryboard storyboardWithName:@"Demo" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"SecVC"];
[self.navigationController pushViewController:SecVC animated:YES];

或者之前说过的segue的方式进行了。

那么如何来指定Storyboard Entry Point?很简单

一天一点xib:7再聊SB_第5张图片

勾选就是设置了Storyboard Entry Point,设置了Storyboard Entry Point的VC会有一个向右的箭头指向它,注意你在Main Interface里选的SB文件中一定要有VC勾选了这个,不然xcode是不知道如何设置rootViewController的,你不用担心多选的问题,你如果选择一个新的VC,旧的那个VC就自然没有了Storyboard Entry Point,但是如果你又取消了勾选那么旧的VC并不会自动又添加Storyboard Entry Point的,要小心。

总结

xib与SB其实还有很多功能等着我们去学习、实践呢,之前介绍的这些都是大家在工作中最长使用的,下次讲讲一些高冷用法。

欢迎大家和我交流沟通,若文章中有错误和纰漏,恳请指正,谢谢。

你可能感兴趣的:(一天一点xib:7再聊SB)