iOS7—Day by day—Day20:ViewController Content and Navigation Bars

来源:互联网 发布:国内运动鞋品牌知乎 编辑:程序博客网 时间:2024/05/05 12:37

这篇文章是天天品尝iOS7甜点系列的一部分,你可以查看完整的系列目录:天天品尝iOS7甜点


Introduction – 介绍

今天的这篇文章将会和之前的文章有些小小的不同。采用iOS7依赖,许多开发者都在处理视图控制器在UINavigationControllers的navigation bar后面的问题。我们将要来看看为什么,然后视图解释如何获得自己所需要的行为.

本章的实例程序能够在github上面进行访问,访问地址:github.com/ShinobiControls/iOS7-day-by-day

iOS7 View Controller Changes: The theory – iOS7视图控制器的改变:理论部分

在iOS7中所有的试图控制器都是全屏的布局,这就意味着wantsFullScreenLayout属性已经被弃用了。然而,我们现在有额外的方法来控制试图控制器的显示问题。下面的这些配置属性可以通过代码和interface builder来使用:

  • edgesForExtendedLayout:这个属性定义的是视图边缘如何扩展到屏幕的边缘。默认的值是UIRectEdgeAll
  • extendedLayoutIncludesOpaqueBars:如果试图控制器是半透明的,默认的边缘将会扩展在bar的下面。然而设置这个属性为YES,就会让边缘扩展到不透明的bar下面。
  • automaticallyAdjustsScrollViewInsets:这个属性是非常强大的属性。如果你的视图中包含了一个滚动视图,然后它将会有自己的内容嵌入,所以自身的内容将会滚动到bar的下面,但是可以滚动看到所有的内容。这个属性默认是YES,并且这是iOS7推荐的行为。
  • topLayoutGuid, bottomLayoutGuide:这些属性将会生成匹配视图可见区域的扩展,也就是,如果有屏幕的上方有一个bar,然后topLayoutGuide将会定位在底部的bar上面。

In Practice – 实践

通过阅读上面的属性描述,我们会发现这非常简单,确实如此。在一些情况下,就会有一些迷惑。

视图控制器在导航控制器之中

让我们先说一下最简单的情况:试图控制器在导航控制器中。

这里我们需要正确的设置edgesForExtendedLayout,否则你的视图将会出现在bar的下面。可以在interface builder中进行设置:

或者在代码中进行设置:

1
self.edgesForExtendedLayout = UIRectEdgeNone;

我们可以看到设置’之前’和’之后’的展现:

 

滚动视图在导航控制器中

我们希望在导航控制器中的滚动视图的可以能够滚动看到全部的内容,但是当你进行滚动的时候内容将会消失在bar的下面。这恰恰是automaticallyAdjustsScrollViewInset要做的。当设置为NO的时候,效果如下:

 

如果改变成YES,效果如下:

  

表格视图在导航控制器中

UITableViewUIScrollView的子类,所以我们期望和上一个滚动视图相同的效果,然后我们的确需要再次设置automaticallyAdjustsScrollViewInsets的属性来得到想要的行为:

  

另外的一些情形

如果你运行今天完成的应用程序,然后你就会发现还提供了另外的一些示例——一个滚动视图在tab视图控制器中,和一个表格视图在tab视图控制器中。其中有一些原因(我认为属于bug,但是很乐意去修正…).嵌入的滚动视图并没有很好的适应导航控制器:

 

Conclusion – 总结

事实上,所有视图控制器现在都是全屏,对于很多开发人员来说这很诡异,而且有很好的理由。周围的文档并不好,我认为可能有一个错误在滚动视图嵌入tab控制器。然而,值得玩——,而当它确实看起来相当不错。

本文翻译自:iOS7 Day-by-Day :: Day 20 :: View controller content and navigation bars

 2014-01-25 Sat  iOS7, iOS7 Day-by-Day, 翻译

0 0
原创粉丝点击