UIScrollerView遇到UINavigationController

今天在UITabBarController  的第一个Tab 页面中放入一个ScrollView, 原本以为可以正常运行。

结果却让人大跌眼镜。  每当我手动滚动或者 缓慢导航到另外一个页面时,当前的scrollView 内容总是会向下移动  N个像素。

最终感谢http://www.cnblogs.com/FightingLuoYin/p/4422816.html 提供的方案;在这里我就当记录下

原因也很容易分析出来,无非是UIScrollView的contentInset被改变了,很容易验证这个说法,在viewDidAppear中将UIScrollView对象的contentInset值给打印出来即可。

现在所要做的事情是解决这个问题,处理的对象当然就是UIScrollView对象的contentInset属性了,将之设置为UIEdgeInsetsMake(0, 0, 0, 0)即可,但在哪儿设置了,笔者在viewDidLoad、viewWillAppear和viewDidAppear这些回调函数中都试过,可是都失败了。

后来查阅stackoverflow,终于找到了解决方法:在相应的ViewController中实现viewDidLayoutSubviews方法,然后设置UIScrollView实例的contentInset属性即可,如下:

- (void)viewDidLayoutSubviews {
    self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
    [super viewDidLayoutSubviews];
}

笔者手贱,发现在viewWillLayoutSubviews中处理同样也可以解决这个问题;甚至隔了几天之后,发现另外一个解决问题的方案:设置相关UINavigationController的navigationBar的translucent属性为False也可以。

还有一些方法:设置ViewController的属性automaticallyAdjustsScrollViewInsets为False。

其实原因很简单,在iOS官方文档《View Controller Catalog for iOS》中能找到答案。

时间: 2024-10-05 20:07:17

UIScrollerView遇到UINavigationController的相关文章

UIScrollerview的contentsize设置

最近被同行的一个朋友问到一个问题"UIScrollerview上添加子控件,给子控件约束好布局之后,还需要给scrollerview重新设置contentsize吗?"于是想到了我自己曾经着手的一个项目,有一个界面就用到了scrollerView,里面添加了子控件,我记得当时scrollerView的frame和屏幕的一样,contensize最后是在里面的子控件布局结束之后重新设置的,所以我的回答是需要设置呀.可是最后,那个朋友就告我让我回去再试试,说是不需要设置的,还说可能是我和他

iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem

转自:http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINavigationController可以翻译为导航控制器,在iOS里经常用到. 我们看看它的如何使用: 下面的图显示了导航控制器的流程.最左侧是根视图,当用户点击其中的General项时 ,General视图会滑入屏幕:当用户继续点击Auto-Lock项时,Auto-Lock视图将滑入屏幕.相应地,在对象

ios UINavigationController

转自:http://www.cnblogs.com/ios8/p/ios-UINavigationController.html UINaviGationController通常被我们称为导航栏,他是视图与视图之间联系沟通的桥梁,一些著名的app都用到了他.下面我们来看一下如何建立一个navigation. 首先,我们通常新建工程是直接将视图控制器添加到window上,而现在有navigation以后,就多了一层:  Appdelegete.h: - (BOOL)application:(UIA

UINavigationController和UIBarButtonItem的例子

#import "AppDelegate.h" #import "FirstViewController.h" #import "SecondViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOption

iOS设计之 多视图导航栏UINavigationController切换视图的简单设计

在iOS平台上创建有个工程,之后在工程中创建两个类视图 操作步骤如下 1.在分别在两个类视图中对主视图设置背景色 FirstViewController.m #import "FirstViewController.h" @interface FirstViewController () @end @implementation FirstViewController - (void)viewDidLoad {    [super viewDidLoad];        //设置主视

UINavigationController导航控制器

UINavigationController导航控制器,是多个界面间跳转的重要元素,可以理解为它存储着多个viewController,它的存储结构是栈,栈的特点是先进后出,所以添加视图控制器时,要特别注意. UINavigationController有几个常用的方法: 1:[UINavigationController initWithRootViewController:viewController ] 是指将哪一个视图控制器设置为导航控制器的根视图控制器,即运行是第一次看到的界面. 2:

UINavigationController

1 #import "AppDelegate.h" 2 #import "RootViewController.h" 3 @interface AppDelegate () 4 5 @end 6 7 @implementation AppDelegate 8 9 10 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc

UINavigationController使用的注意事项

1.常用属性viewControllers //所有在栈中的控制器topViewController //栈顶控制器navigationBar //导航栏 竖屏下默认44,横屏默认32 2.对navigationBar的标题进行字体颜色等设置NSDictionary *dic = @{ NSForegroundColorAttributeName:[UIColor whiteColor] }; UIViewController.navigationBar.titleTextAttributes

UINavigationController使用详解

有一阵子没有写随笔,感觉有点儿手生.一个多月以后终于又一次坐下来静下心写随笔,记录自己的学习笔记,也希望能够帮到大家. 废话少说回到正题,UINavigationController是IOS编程中比较常用的一种容器view controller,很多系统的控件(如UIImagePickerViewController)以及很多有名的APP中(如qq,系统相册等)都有 用到.说是使用详解,其实我只会介绍几个自认为比较重要或者容易放错的地方进行讲解,下面让我们挨个探探究竟: 首先上一张图(来自苹果官