在使用NavigationController情况下的布局的Y轴的起始位置
在有的时候,当一个ViewController被push进一个NavigationController的时候,view上会有一个高度为64的NavigationBar(除非主动隐藏了NavigationBar)。
那么在ViewController的view上布局的时候,Y轴的起始位置是从 Y=0 开始,还是Y=64?
这两种的情况都是会出现的,那么起始位置什么时候是0什么时候又是64呢?
首先创建一个ViewController的方法一般有三种:
1.纯代码创建
2.Xib创建
3.在stroyboard上创建
位置是0开始还是64,其实取决于,你往view添加的组件是什么,是UIScrollView或者UIScrollView的子类还是其他的组件。
(一)首先往view上添加一个跟UIScrollview 没有关系的组件(以button为例)
如果使用的是storyboard来布局的话,这个问题会相对简单点。因为在storyboard上被压入的ViewController会自动显示NavigationBar的位置
这样布局的时候自然而然的会从NavigationBar的下面开始布局,也就是Y=64,比如往上面拖一个button
这样这个button是正常显示的,不会被NavigationBar遮住,此时button的Y轴是64。所以基本可以肯定,如果使用代码写的组件也是需要从Y=64的位置开始布局。其实在storyBoard中如果将这个button继续向上托的话,这个button就会添加到Navigationbar上了。
(1)当Y=0的时候
在这种情况下,button是被NavigationBar遮住的
(2)当Y=64的时候
在Y=64的情况是正常的
(二)现在往view上添加UIScrollView的子类UITableView
还是现在storyboard上直接拖一个TableView,TableView的其实位置也放在NavigationBar的下面也就是Y = 64,。
结果在模拟器上运行的结果却和往上面添加button是不一样的
可以看出来TableView往下移,是不是TableView的Y轴位置往下移了呢?
给TableView设置一个边框发现其实并不是的TableView的Y轴位置还是64
那是是不是TableView的contentOffset发生了变化呢?于是分别在viewDidLoad,viewWillAppear,ViewDidAppear的时候打印TableView的contentOffset
发现在viewDidAppear的时候TableView的contentOffset的Y是发生64的偏移。如果使用的ScrollView的话,情况也是一样的,在ScrollView上添加的组件都是会向下发生64的偏移。
所以按照这个情况来说那么Scrollview以及他的子类在布局的时候Y轴不是从64开始而是0,测试一下果然如此
现在看上去内容的位置是对了,但是实际上TableView还是被NavigationBar遮住了64大小的位置,但是因为内容自动往下偏移了64,所以才出现了这样的效果
(3)那如果view上既有tableView又有其他组件又是什么情况呢?
现在再往view上放一个button,给他的默认位置为64
跑一遍模拟器看看
从模拟器的结果看来位置都是正确的,看来在布局的时候TableView和button的不会相互影响的。这样的话,如果button的Y轴变成0的话,那么他应该会被NavigationBar遮住
跑一遍模拟器,果然是这样。
在布局的时候如果使用了NavigationController的时候他会对ScrollView以及他的子类进行一个修正,也就是把他的contentOffset向下偏移64,所以布局的时候除了ScrollView以及他子类之外的其他控件都需要从Y=64开始布局。其实在viewController中有一个属性叫做automaticallyAdjustsScrollViewInsets, 这个属性官方的解释简单的说就是ViewController会根据status Bar、NavigationBar、tabBar的高度对ScrollView的内容的为做出相应的调整,这个属性是IOS7.0以后的才有的。默认情况下这个属性是YES。所以在上面的TableView出现了内容下移的现象,如果想将TableView的Y轴设置从64开始,并且内容不发生偏移的话,将automaticallyAdjustsScrollViewInsets属性设置为NO就可以了。
(4)如果有两个或者多个的ScrollView或者他的子类的时候又是什么情况呢?
在视图控制器上放两个TableView,将他们的Y其实位置都设置为64,那是不是这两个TableView的内容都会下移64呢?
模拟器跑下来却不是的
一个TableView的内容被自动下移了,另一个并没有,再试试放三个TableView试试
还是一样一个内容偏移了,其他的并没有。这说明automaticallyAdjustsScrollViewInsets是起来作用的,但是只在一个TableView上用,如果把automaticallyAdjustsScrollViewInsets设置为NO又是什么情况呢?
可以看出来第一个TableView的内容不再偏移了,所以automaticallyAdjustsScrollViewInsets在有个多个ScrollView或者他的子类的时候只会调整他们其中的一个。
所以具体怎么使用,还是看每个人的需要。
在使用NavigationController情况下的布局的Y轴的起始位置的更多相关文章
- python 11:range(起始索引,终止索引,步数)(默认情况下步数为1,生成从起始索引,每次增加(终止索引-起始索引)/步数,到终止索引前的数字串)
squares = [] for value in range(1,11): #第三参数默认为1,生成从1开始,每次增加1步数,到11前的10为止的数字串 square = value ** 2 sq ...
- C++对象在继承情况下的内存布局
1,C++ 中继承是非常重要的一个特性,本节课研究在继承的情形下,C++ 的对象模 型又有什么不同: 2,继承对象模型(最简单的情况下): 1,在 C++ 编译器的内部类可以理解为结构体: 2,子类是 ...
- ios --xib自定义,解决在导航栏不透明的情况下,自定义xib view高度被压缩64的问题
在使用xib自定义view的时候,个人习惯性的直接使用xib中的约束,所以自然而然的要打开Autolayout.以前在使用的时候没有发现什么问题,最近项目中使用的时候突然发现在导航栏透明的情况下,出现 ...
- 排版紧凑情况下IOS 浏览器的文字部分选中问题
一.需求 一个每一项都是图文混排的列表页,在需要对其中的某一部分文字进行选中copy的时候,IOS个二货每次都是直接选中了整个列表项,无论怎么操作它的选框都没有办法做到部分选中. 这是我本周遇到遇到的 ...
- 在chrome下-webkit-box布局的一个bug
chrome,也就是webkit内核下作的检测, chrome版本是40, -webkit-box这种布局在移动端用的比较多,主要是因为pc端的浏览器内核参差不齐. 因为在写HTML的时候看上了-we ...
- EasyUI特殊情况下的BUG整理
前面有两篇: Easyui - combo[tree,box]下拉图标有间隙bug解决方法 http://blog.csdn.net/isea533/article/details/12996561 ...
- 在table中tr的display:block在firefox下显示布局错乱问题
[转自:] http://blog.csdn.net/sd2131512/article/details/4720345 按照常理,对于某一单元行需要显示时,使用:display:block属性,不需 ...
- Android手机在不同分辨率情况下字体自适应大小
两种解决方法: 一. 1.首先根据不同分辨率获取不同字体大小. 在RES里创建values-480x320/strings.xml 里面设置<dimen name="Text_size ...
- StoryBoard不使用AutoLayout情况下 按比例快速兼容适配iPhone6/6 Plus教程【转载】
StoryBoard不使用AutoLayout情况下 按比例快速兼容适配iPhone6/6 Plus教程[转] 声明:本文章是为了后期快速兼容6和6Plus的按比例放大方法,对于部分读者来说可能觉得该 ...
随机推荐
- Flex开发实战(一)--Flex的具体介绍
背景 因为近期要维护公司的项目,项目里面用到了Flex技术,所以近期一直在恶补.这篇博文就将近期的学习内容,进行一下简单的总结. 不管是做web还是桌面应用.相信大家对于界面的要求已经越来越高.界面趋 ...
- Hibernate单向“一对多”关联
1. 基于连接表的单向“一对多”关联,应该优先被采用其中指定many-to-many的unique="true",为单向“一对多”,不指定就是单向“多对多” <class n ...
- nvidia显卡驱动卸载和卸载后的问题
因为装了nvidia显卡驱动后开机一直处于循环登录界面.password输入正确也是进不去.然后就决定卸载nvidia显卡驱动.安装之后出现还是循环登陆. 是openGL的问题 有至少两种解决方 ...
- dedecms上传图片相对路径改成绝对路径方法
很多朋友使用dedecms的时候都用了二级域名的功能,所以造成很多文章中图片不显示的问题. 解决方案如下: 1. 进入dede后台"系统"-"系统基本参数"-& ...
- Redis(四):常用数据类型和命令
命令手册网址 http://doc.redisfans.com/ Redis数据类型 l String l Hash l List l Set l Sorted Set Redis中还有3种特殊的数据 ...
- Strategy模式
Strategy模式 Strategy模式要解决的问题和Template模式类似.都是为了把算法的声明和算法的实现解耦.Template模式是通过继承来实现的,而Strategy模式是通过组合来实现的 ...
- 如何获取UA
function whatBrowser() { document.Browser.Name.value=navigator.appName; document.Browser.Version.val ...
- int和Integer差别
种原始数据类型之中的一个. Java为每一个原始类型提供了封装类.Integer是java为int提供的封装类. 原始数据类型包含byte.int.char.long.float.double.boo ...
- Unity Tiling和offset的使用
offset是显示框的偏移量 1)拿flappy bird素材来说,起始状态是这种↓. 注意显示框(黄色).它包含的范围是这种↓ 2)当offset_x设置为0.5的时候,显示框(黄色)包含的范围应该 ...
- cnetos 6.7彻底解决vmware NAT网络问题
cnetos 6.7彻底解决vmware NAT网络问题 vmnet8在nat时使用 vmnet1 在桥接时使用 *解决Windows不能ping通linux的问题 vmnet8相当于一个网卡,虚 ...