iOS7 edgesForExtendedLayout -- 解决冲突 / 系统偏移

今天在做UISearchBar,UISearchDisplayController时遇到了一个问题,在点击搜索栏时阴影部分的位置出现偏差

如下图:

始终觉得很奇怪,后面单独做了一个demo,将同样的代码拷过去发现显示正常的。

然后再逐一查看代码看到如下:

[objc] view plain copy print?

  1. - (void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4. // Do any additional setup after loading the view.
  5. if (OSVersionIsAtLeastiOS7()) {
  6. if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
  7. {
  8. self.edgesForExtendedLayout = UIRectEdgeNone;
  9. }
  10. }
  11. }

发现可疑之处,Google之iOS 7 教程:让程序同时支持iOS 6和iOS 7,找到答案。

原因:

[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll。当你的容器是navigation
controller时,默认的布局将从navigation bar的顶部开始。这就是为什么所有的UI元素都往上漂移了44pt。

- (void)viewDidLoad中添加如下一行代码:

1
self.edgesForExtendedLayout = UIRectEdgeNone;

这样问题就修复了。

2:可以用
self.nabigationcontroller.navigationbar.translucent = yes;

3:可以用
解决冲突 禁止系统偏移  vc.automaticallyadjustsScrollviewInsets =NO

其实这一切都是automaticallyAdjustsScrollViewInsets在作怪,我们可以先看一下官方文档中对它的描述:

automaticallyAdjustsScrollViewInsets

Specifies whether or not the view controller should automatically adjust its scroll view insets.

@property(nonatomic, assign) BOOL automaticallyAdjustsScrollViewInsets

Discussion

Default value is YES, which allows the view controller to adjust its scroll view insets in response to the screen areas consumed by the status bar, navigation bar, and toolbar or tab bar. Set toNO if you want to manage scroll view inset adjustments yourself, such as when there is more than one scroll view in the view hierarchy.

Availability

  • Available in iOS 7.0 and later.

Declared In

UIViewController.h

哈哈,由此可见,当我们一个界面有多个tableView之类的,要将它设置为NO,完全由自己手动来布局,就不会错乱了.

时间: 2024-10-04 01:45:00

iOS7 edgesForExtendedLayout -- 解决冲突 / 系统偏移的相关文章

SVN解决冲突

SVN冲突出现场景 如今是一个团结协作的时代,开发一个系统,往往会多人协作共同完成.版本管理是必不可少的,常用的软件有Git,SVN等.今天说一下,SVN管理版本时,如果出现冲突后,如何快速解决冲突. 首先说明一个问题,有一种情况无论如何都不会出现冲突.假如有一个叫qaz的程序员,他checkout了版本库,这样他拥有了一个工作副本.然后,他修改了某个文件IMRoot.cs,commit到SVN,并且这个文件保证不会有其他人在他们的工作副本修改并提交到SVN.这种情况下,无论qaz 如何修改IM

svn 如何解决冲突

项目中,往往不止你一人开发,多人开发,难免会有代码的冲突.彼此间谁也不能保证不会修改同个文件.如果修改了同个方法的内容.这时提交到svn是会提示代码冲突的. 当然,冲突是可控的,但不能避免.每次写代码的时候,标准的姿势是先update,再修改提交. 下面,我们说下冲突后该如何解决? 文件冲突格式如下 : <<<<<<< filename your changes ======= code merged from repository >>>>

git之解决冲突

前面几次使用git,一直对于冲突的这个问题不是很理解,感觉有些时候就会产生冲突,在此记录一下解决冲突的流程 1.git bash上面冲突显示 2.在idea上面可以看到冲突的文件 3.去解决冲突 4.采取冲突的合并的办法,对于不冲突的文件,我们进行合并,但是对于有冲突的,我们选择一个 进行合并 二.关于git的小知识点 1.git checkout pom.xml,当我们对pom里面的文件进行了修改,这个可以可以不提交,直接可以回滚到我们初到这个分支 2.随时编写的时候,注意自己的分支问题 3.

git 解决冲突

$ git push origin master To /home/fan/repo/code/../a.git/ ! [rejected] master -> master (fetch first) push失败,版本落后,提示要fetch $ git fetch origin $ git merge origin/master Auto-merging a.txt CONFLICT (content): Merge conflict in a.txt 发生冲突 选择修改,解决冲突 git

数据结构--散列(分离链接法解决冲突)

散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点存入到此存储单元中.检索时,用同样的方法计算地址,然后到相应的 单元里去取要找的结点.通过散列方法可以对结点进行快速检索.散列(hash,也称"哈希")是一种重要的存储方式,也是一种常见的检索方法. 因此,散列函数更像是一种映射,散列函数的选择有很多种,下面以散列函数为关键值对10取余为例,说明散列的插入关键

散列函数之单散列算法解决冲突问题

1. 问题 问题同<简单散列函数算法> 设有10个非负整数,用不多于20个的储存单元来存放,如何存放这10个数,使得搜索其中的某一个数时,在储存单元中查找的次数最少? 问题类似于,有10个带号码的球,放到编号为{0, 1, 2, -, 19}共20个盒子中,每个盒子最多放一个,问如何放,使能够用最少的次数打开盒子,知道任一个球所在的盒子编号? 2. 分析 <简单散列函数算法>中,已经分析得出,只要能解决冲突问题,就能将查找时间降为常量范围内. 思路:当一个数发生冲突时,再找一个没有

seajs使用-1 解决冲突和依赖

作用:解决冲突和依赖 1. 发生冲突 <script src="common.js"></script> <script> 你的同事: // tab() 你的新同事 function tab() {} // 冲突了 </script> 解决冲突:加命名空间(缺点:1. 前缀长,2. 只能降低冲突不能避免) 2. 发生依赖 <script src="show.js"></scirpt> // 升级

四、git学习之——分支管理、解决冲突

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN! 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了.如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险. 现在有了分支,就不用怕了.你

如何解决win7系统无法运行cmd命令提示符

如何解决win7系统无法运行cmd命令提示符 CMD命令可以帮助我们很快的执行所需要的程序命令,可以查询系统中很多的信息和解决系统很多的故障,对我们来说非常方便,但是最近有用户反馈自己win7电脑无法运行cmd命令提示符窗口了,那么接下来就给大家介绍解决win7无法运行cmd命令提示符的方法. 工具/原料 win7系统 Regedit注册表 方法/步骤 在桌面打开开始菜单,选择"控制面板",如下图所示: 在打开的控制面板窗口中,选项"系统",如下图所示: 3.打开的