隐藏状态栏后tableview自动滚动的问题

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

状态如下:

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

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

if ([[[UIDevice currentDevice] systemVersion]compare:@"7.0"]!=NSOrderedAscending) {
        self.edgesForExtendedLayout = UIRectEdgeNone;
        self.extendedLayoutIncludesOpaqueBars = NO;
        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,就不会又这个自动的调整了。

好,我们再运行一下,得到如下效果:

OK!

时间: 2024-08-27 00:42:48

隐藏状态栏后tableview自动滚动的问题的相关文章

swipe.js触摸后不自动滚动的修改

function stop() { //修改触摸后不自动滚动的问题 2016-9-23 //delay = 0; delay = options.auto > 0 ? options.auto : 0; clearTimeout(interval); } 这个地方修改后即可

vue.js学习之 如何在better-scroll加载完成后,自动滚动到最底部

首先我们需要使用scrollTo这个方法: scrollTo(x, y, time, easing) 参数: {Number} x 横轴坐标(单位 px) {Number} y 纵轴坐标(单位 px) {Number} time 滚动动画执行的时长(单位 ms) {Object} easing 缓动函数,一般不建议修改,如果想修改,参考源码中的 ease.js 里的写法 为了组件的复用性,我们需要在scroll组件的props添加一个flag,可以监听父元素是否开启滚动到最底部. scrollT

tableView 自动滚动到底部

- (void)addData:(id)object{ NSInteger count = self.dataArray.count; _index ++; NSString * str = [NSString stringWithFormat:@"当前第%zd行",_index]; [self.dataArray addObject:str]; if (count * 44.0f > self.tableView.height) { NSMutableArray *insert

C# ListBox 自动滚动到底部 方法:

在ListBox中添加一条记录(ListBox.Items.Add方法)后,滚动条会自动回到顶部.我们可能更希望它自动滚动到底部,简要介绍几种方法. 方法一: 1 this.listBox1.Items.Add("new line"); 2 this.listBox1.SelectedIndex = this.listBox1.Items.Count - 1; 3 this.listBox1.SelectedIndex = -1; 在添加记录后,先选择最后一条记录,滚动条会自动到底部,

tableview(scrollview)被拉动后能立即滚动到顶端

再仔细说下: 1:tableview滑动前,下面悬浮的按钮隐藏2:tableview被拉动后,下面悬浮的按钮出现,点击这个按钮tableview滚动到顶端.(便于分页加载多页后用户能立即滚动到顶端) - (void)viewDidLoad {    aTopBtn = [UIButton buttonWithType:UIButtonTypeCustom];    aTopBtn.frame = CGRectMake(ScreenWidth-50,ScreenHeight-64-105, 35,

Android点击列表后弹出输入框,所点击项自动滚动到输入框上方(类似微信的评论)

Android点击列表后弹出输入框,所点击项自动滚动到输入框上方 使用微信的朋友圈会发现,点击某一条评论后输入框会弹出来,然后所点击的那一项会自动地滚动到输入框上方的位置,这样如果开始所点击的评论在屏幕很下方的话,就不会被输入框遮住,虽然微信这一点在我的MX2频繁点几次后滚动的位置就完全错误了,但据说在有些机型上效果还不错,还有其他地方可能会有类似的需求,比如登录时软键盘可能会把登录按钮遮住. 要实现这个功能需要注意的地方主要有两点: 什么时候进行滚动操作,以及有可能还需要在输入框消失时回滚回去

数据更新后让ListView自动滚动到底部

在做聊天界面的时候想要发送新的数据后,listview自动滚动到底部,显示出最新的数据.网上找了两个方法,觉得不错,记录一下. 方法一: 给listview添加下面两个属性 android:stackFromBottom="true"android:transcriptMode="alwaysScroll" or mListView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 方法二: //

实现当UILable的内容超出其范围后自动滚动效果

本文主要介绍 [当UILabel的内容超出其自身的宽度范围后,进行互动展示的效果],我们先来看一下Demo的效果图. 实际实现起来并不十分繁杂,在这里,为了开发的效率,我们使用了一个已经封装好的UILabel控制类CBAutoScrollLabel:点击“阅读原文”下载. 在写代码之前,我们还有一个准备工作,在stroyBoard中,找到需要实现效果的viewController,并向需要展示滚动效果label的地方拖一个UIView空间,并将其大小确定好(范围和之前需要展示滚动效果的label

点击状态栏让tableview回到顶部最简单的方法

先看官方解释,如图: 官方说一个屏幕中只能允许一个scrollsTop = YES;不然就不能滚回顶部了!! 最简单的方法: 那么就让一个屏幕中只存在一个scrollsTop = YES就可以了, 其他的scrollsTop = NO;那么就可以默认点击状态栏tableview回到顶部! 完毕!!! ************************************************************************************************* 附