1:让ViewController在NavigationBar下面开始布局。

automaticallyAdjustsScrollViewInsets作用

当Controller上存在唯一一个UIScrollview及其子类时,会自动设置内边距,让scrollview占据整个视图,又不会让导航栏覆盖。当Controller上的第一个子视图不是UIScrollview及其子类时,不会自动设置内边距,原点会从状态栏开始,而不是导航栏下面,造成64px的偏移。解决方案有两种

    /// 取消系统自动布局内边距
if ([nav respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) {
nav.automaticallyAdjustsScrollViewInsets = NO;
}
    /// 取消扩展的边距
if ([nav respondsToSelector:@selector(setEdgesForExtendedLayout:)]) {
nav.edgesForExtendedLayout = UIRectEdgeNone;
}
    /// 在iOS11取消内边距要使用新方法
UIScrollView *sv = nil;
sv.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;

也许你已经发现了,当你隐藏了页面中的导航栏,并且在self.view上添加了一个tableview/scrollView时,你的tableview的位置会向下偏20个单位,并且你怎么找都找不到问题所在。。。因为这就不是你的问题。

你会发现在ios7.1及以上的系统下都会存在这个bug(7.1版本以下我没有试过,可以自己试试),解决办法就是不要直接把你的tableview加在self.view上,而是先要在self.view上放上一个任意的子视图,再将tableview添加在self.view上,这样tableview就不是self.view的第一子视图了。归结为一句话就是滚动视图不能作为父视图的第一子视图。

问题代码

self.navigationController.navigationBar.hidden = YES;

解决方法,就是不让滚动视图作为父视图的第一子视图。

// 添加占位视图
[self.view addSubview:[[UIView alloc] initWithFrame:CGRectMake(, , , )]];

解决键盘遮挡问题。一个思路就是:

在BaseViewController页面添加ScrollView。通过监听键盘事件来处理偏移。

UIScrollView 三个属性解析

一: scrollToTop

  是否允许点击状态栏滚动到顶部。默认允许。

二:trancking(readOnly)

用于表示用户是否已经解除scrollView但可能还没有开始滚动。

在手指接触到scrollView的一瞬间发生三件事:

   1 tracking属性变为yes。

2 触发拦截事件。

3 一个内置的计时器开始生效,用来检测在极短的时间内手指是否发生了移动

如果在时间间隔内没有发生明显的滚动。会将事件传递给subView。沿着正常的响应链传递。如果发生了比较大的移动,scrollView会处理这次的触摸事件。

三:delaysContentTouches:

默认的延迟处理手势是打开的。如果在极短的时间里能确定移动就自己处理。否则就传递给子视图进行处理。如果设置为"NO", scrollView立马触发- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view方法 ,交给用户自己判断

四:canCancelContentTouches:

默认值为YES,如果为YES,当用户触摸手势已经被确定交给subview响应的时候 ,会立即调用- (BOOL)touchesShouldCancelInContentView:(UIView *)view ,交给此方法处理接下来的动作,如果此方法返回NO,则继续传递给subview,scrollView不会滚动,返回YES,则scrollView会滚动 ,subview 会取消处理这个事件 如果返回NO ,则scrollView不会滚动, subview响应这个触摸事件

参考链接: http://www.jianshu.com/p/9436c9a2cd1e

隐藏导航栏,偏移20PX的更多相关文章

  1. iOS 滑动隐藏导航栏-三种方式

    /** 1隐藏导航栏-简单- */    self.navigationController.hidesBarsOnSwipe = YES; /** 2隐藏导航栏-不随tableView滑动消失效果 ...

  2. 安卓ROOT后禁用/隐藏导航栏/虚拟按键

    安卓ROOT后禁用/隐藏导航栏/虚拟按键 提醒:提前装好EASY TOUCH 等类似工具. 用ROOT EXPLORER 或 ROOT BROWSER system\bulid.prop 最后加一行: ...

  3. AMScrollingNavbar框架(自动隐藏导航栏)使用简介

    AMScrollingNavbar框架是一个可以上拉隐藏导航栏和下拉显示导航栏的框架,这个开源框架的调用也很简单,本章节就给大家介绍一下这个框架的用法. 一.下载及导入框架 AMScrollingNa ...

  4. iOS 隐藏导航栏下的黑线

    一.找到导航栏下的黑线 // 寻找导航栏下的黑线 - (UIImageView *)findHairlineImageViewUnder:(UIView *)view { if ([view isKi ...

  5. iOS侧滑返回到隐藏导航栏的VC,导航栏会闪现一次

    VCA:是一个隐藏导航栏的页面:VCA在ViewWillAppear生命周期函数中设置导航栏隐藏: //隐藏导航栏 [self.navigationController setNavigationBa ...

  6. iOS11关于隐藏导航栏后带有tableView界面出现,下移问题

    //解决iOS11关于隐藏导航栏后带有scrollView界面出现,下移问题 if (@available(iOS 11.0, *)) { self.tableView.contentInsetAdj ...

  7. uwp - 上滑隐藏导航栏下滑显示

    原文:uwp - 上滑隐藏导航栏下滑显示 好久没写博客了,因为忙着工作.昨天周末填坑需要做一个上滑列表数据时隐藏导航栏下滑时显示的效果,下面分享一下我的做法,希望能给你带来帮助. 思路是通过判断滚动条 ...

  8. iOS---实现简书和知乎的上滑隐藏导航栏下拉显示导航栏效果

    因为自己用简书和知乎比较多,所以对其导航栏的效果比较好奇,自己私下里找资料实现了一下.这个效果的关键点在于下方可供滑动的内容的便宜距离inset的改变,以及滑动的scrollview代理的执行,废话不 ...

  9. 在隐藏导航栏的控制器中,调用UIIMagePickerController,出现导航栏变透明的问题

    在隐藏导航栏的控制器中,调用UIIMagePickerController,出现导航栏变透明的问题 解决办法 #pragma mark - UIImagePickerController Delega ...

随机推荐

  1. socket编程介绍

    Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...

  2. js如何切割字符串

    <script language="javascript"> str="2,2,3,5,6,6"; //这是一字符串 var strs= new A ...

  3. Loadrunner12.5-录制http://www.gw.com.cn/网页时提示“SSL身份验证失败”错误,这是为什么呢?

    问题:LR产品,录制http://www.gw.com.cn/ 网页时提示下图错误,这是为什么呢? 请在如下recording options中选择正确的SSL版本,再进行录制. 注:如何确定那个SS ...

  4. Spark cache、checkpoint机制笔记

    Spark学习笔记总结 03. Spark cache和checkpoint机制 1. RDD cache缓存 当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出 ...

  5. 神奇的照片修复术,这才是 PS 的正确打开方式!

    蒲公英种子从远处飘回 聚成伞的模样 太阳从西边升起 落向东方 运动员回到起跑线上 轰鸣的火车退回家乡 雪花纷飞 飘向天际 我沉入梦乡 你还在我身旁 ——公益广告 大概只有时光倒流,我们才能回到那些每天 ...

  6. 设计模式-生成者模式之c#代码

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. mathematica9激活

    1.打开m9软件 2.打开keygen软件 3.点手动输入验证码,输入里面的id到keygen软件再点save mathpath 4.复制keygen软件里面 的mathpass到 将生成的mathp ...

  8. Hibernate不能实时获取MySQL数据库的更新

    在hibernate.cfg.xml配置文件中,增加以下内容: <property name="hibernate.connection.provider_class"> ...

  9. 2018.09.25 codeforces1053E. Euler tour(并查集+st表+模拟)

    传送门 毒瘤细节题. 首先考虑不合法的情况. 先把相同的值配对,这样就构成了一些区间. 那么如果这些区间有相交的话,就不合法了. 如何判断?DZYO安利了一波st表,我觉得很不错. 接着考虑两个相同的 ...

  10. 2018.07.17 洛谷P1368 工艺(最小表示法)

    传送门 好的一道最小表示法的裸板,感觉跑起来贼快(写博客时评测速度洛谷第二),这里简单讲讲最小表示法的实现. 首先我们将数组复制一遍接到原数组队尾,然后维护左右指针分别表示两个即将进行比较的字符串的头 ...