zoukankan      html  css  js  c++  java
  • 隐藏状态栏后tableview自动上移20个像素的问题

      最近在开发过程中碰到一个很奇怪的问题,将状态栏隐藏掉之后,页面上的tableView会自动上移20个像素。

      这是因为在iOS7.0之后,系统会自动调整scrollView的layout 和 contentInsets 。从而使其自动地适应iOS7之后那种整个屏幕都可以放入自定义控件的方法。而我们大多数在开发过程中并不希望收到系统自动的影响而是完全掌握开发过程中的每一个细节。还有一个愿意是因为目前我们大多数的应用都是要向下适配到iOS6,而在6中并未提供这样的特性,所以在代码级别依然希望使用相对“保守”的代码。

         所以解决这个问题的方法是讲系统的这些自动调整scrollView 的 contentInsest 的特性屏蔽掉。方法如下:

      

        self.edgesForExtendedLayout = UIRectEdgeNone;
        self.extendedLayoutIncludesOpaqueBars = NO;  
        self.modalPresentationCapturesStatusBarAppearance = NO;  
        self.automaticallyAdjustsScrollViewInsets=NO;
    如果该控制器下面还有tabbar,如果写了下面第一句,tabbar会变色,所以用下面这种方法
     //    self.edgesForExtendedLayout = UIRectEdgeNone;
        self.extendedLayoutIncludesOpaqueBars = YES;
        self.modalPresentationCapturesStatusBarAppearance = NO;
        self.automaticallyAdjustsScrollViewInsets=NO;

      其中edgesForExtendedLayout表示本viewController中的ScrollView使用哪些新特性中提供的contentInsets. 我们使用None.默认为All,也就是所有的方向都使用。

      extendedLayoutIncludesOpaqueBars表示这种自适应的contentInsets是否包括statusBar的高度。这是一条比较关键的代码。我们的tableView之所以会向上滚动20像素就是因为当我们隐藏了statusBar之后scrollView认为没有了状态栏,那么它的contentInsets.top自动减小20px.

      automaticallyAdjustsScrollViewInsets 表示在本viewController的view.subviews中的子view是否要受到系统的自动适配。比如在这里如果设为YES(默认也是),那么这个tableView.contentInsets.top就会为64.这里我们置为No,就不会又这个自动的调整了。

  • 相关阅读:
    leetcode 673. 最长递增子序列的个数 java
    leetcode 148. 排序链表 java
    leetcode 98. 验证二叉搜索树 java
    leetcode 29. 两数相除 java
    leetcode 234. 回文链表 java
    Valid Palindrome LeetCode Java
    Single Number II LeetCode Java
    Single Number LeetCode java
    Search in Rotated Sorted Array II LeetCode Java
    Search in Rotated Sorted Array leetcode java
  • 原文地址:https://www.cnblogs.com/HMJ-29/p/6722686.html
Copyright © 2011-2022 走看看