UIScrollView的应用以及注意事项

2016-08-09  本文已影响89人  成语笔记

1、在scrollview中以及tableview中,判断scrollview的滑动方向:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{

CGPoint translation = [scrollView.panGestureRecognizer translationInView:scrollView.superview];

if (translation.y>0) {

self.hiddenHeadView=NO;

}else if(translation.y<0){

self.hiddenHeadView=YES;

}

}

2、navigationbar以及tabbar的对UIScrollview以及UITableView的影响:

当整个UIViewController中的第一个View是UIScrollView或者是其子视图的时候,系统会自动根据当前页面中是否存在navigationbar或者是tabbar设置UIScrollView或者是其子视图的contentInset,目的就是为了让其contentView中的内容全部能展示出来,让用户全部能看到(注意:这只有在UIScrollView或者是其子视图是当前UIViewController中的第一个View的时候才可以)。在开发过程中,当需求需要在某一时刻突然隐藏掉navigationbar或者是tabbar时候,此时的contentInset还是初始值,这就导致了UIScrollView的contentView在视觉上会有向上或者是向下的偏移(隐藏navigationbar会有向下64偏移量,隐藏tabbar会有向上49的偏移量     注意:这种现象只在IOS8 - IOS10中有,在IOS11中不存在),解决这种问题方方法就是:

方法一:UIVIewController中的第一个View不能是UIScrollView或者是其子视图,在最上方添加一下代码

[self.view addSubview:[[UIView alloc] init]];

方法二:设置UIScrollView 的contentInset 

self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);这种方法治标不治本,只是看起来有效果,但是当你push到另一个页面中在pop回来又会出现该问题

以上两种方法都是解决(ios8 - ios10)中的问题,在ios11中没有这种问题,iOS11中好像能自动调整contentInset,怎么隐藏navigationbar和tabbar都没影响

上一篇下一篇

猜你喜欢

热点阅读