UIScrollView

关于UIScrollView左右滚动判断
UIScrollView 实践经验

目录

  • UIScrollView的常见属性
  • contentSize 内容的尺寸
  • contentOffset 滚动的位置(偏移量)
  • contentInset 内容视图,增加额外的滚动区域
  • UIScrollView的其他属性
  • bounces 设置是否需要弹簧效果
  • scrollEnabled 是否能滚动
  • showsHorizontalScrollIndicator 是否显示水平滚动条
  • showsVerticalScrollIndicator 是否显示垂直滚动条
  • scrollView.layer.masksToBounds = NO 不受边距影
    响,可以超出scrollView的大小
  • 隐藏Cell之间的分割线
  • UIScrollView 设置代理
  • UIScrollViewDelegate 协议方法
  • UIScrollView 设置移动动画
    -- block 设置

补充:ScrollView的底部被标签栏控制器(tabBar)遮挡的解决办法

//设置ScrollView高度减去113(导航栏高度64加标签栏高度49)
self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, self.view.width, self.view.heigh t- 113)];
如果需要scrollView遮盖,某些可以点击事件的控件,当scrollView移开控件是还可以获取点击事件,需要设置

1.scrollView的高度不能遮盖控件

2.下面这个属性可以让子视图的移动边距不受ScrollView的边距影响,可以显示出去

//ScrollView的子视图不受边距的影响,可以超出
scrollViewscrollView.layer.masksToBounds = NO;

注意事项

  • UIScrollView创建时,会自动创建2个子控件(上下滑块/左右滑块);
  • 获取添加在UIScrollView的子控件时,最好不要使用:
[self.scrollView.subviews firstObject];
[self.scrollView.subviews lastObject];

上面两个方法,可能会获取到滑块控件;

  • 也不要用子控件的下标来获取;当用户滑动scrollView时,滑块在视图的位置是随机的,容易获取错误。

UIScrollView的常见属性

contentSize 内容的尺寸:
  这个属性用来表示UIScrollView滚动的位置
- 仅上下移动,设置高度
- 仅左右移动,设置宽度
  @property (nonatomic) CGPointcontentOffset;
  self.scrollView.contentSize 

contentOffset 设置偏移量:
  这个属性用来表示UIScrollView滚动的位置
  @property (nonatomic) CGSizecontentSize;
  self.scrollView.contentOffset

contentInset 增加额外的滚动区域:
  这个属性能够在UIScrollView的4周增加额外的滚动区域,一般用来避免scrollView的内容被其他控件挡住
@property(nonatomic) UIEdgeInsets contentInset;
self.scrollView.contentInset = UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)

UIScrollView的其他属性

设置UIScrollView是否需要弹簧效果
@property(nonatomic) BOOL bounces;

设置UIScrollView是否能滚动
@property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;

是否显示水平滚动条
@property(nonatomic) BOOL showsHorizontalScrollIndicator;

是否显示垂直滚动条
@property(nonatomic) BOOL showsVerticalScrollIndicator;

ScrollView的子视图不受边距的影响,可以超出scrollView
scrollView.layer.masksToBounds = NO;

隐藏Cell之间的分割线
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

UIScrollView设置代理

设置代理
  self.scrollview.delegate = self;
设置协议
  @interface ViewController () <UIScrollViewDelegate>

UIScrollViewDelegate协议方法

滚动相关

  • 当scrollView滚动的时候时时调用这个方法

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

    //获取scrollView的偏移量
    CGPoint point = scrollView.contentOffset;
    NSLog(@"正在滚动:%@", NSStringFromCGPoint(point));
}
  • 即将开始拖拽的时候调用

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{

    NSLog(@"开始拖拽"); 
}
  • 结束拖拽的时候调用
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    
    NSLog(@"已经停止滚动");
}
  • 将要停止拖拽的时候调用这个方法(将要松手的时候)
  • 参数1:委托
  • 参数2:停止拖拽后x和y方向的加速度
  • 参数3:滚动停止的时候scrollView的偏移量(停止滚动的时候的位置信息)
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{

    NSLog(@"停止拖拽:%@", NSStringFromCGPoint(*targetContentOffset));
}
  • (减速完毕)由于惯性停止滚动的时候调用
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{

    NSLog(@"已经停止拖拽");
}
  • 滚动将要开始减速的时候会调用这个方法

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{

    NSLog(@"开始减速");
}
  • 已经停止滚动动画的时候调用
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{
  
这个停止是停止通过setContentOffset:animated:这个方法产生的动画
    NSLog(@"停止滚动动画");
}
  • 设置点击状态栏是否可以回到顶部(默认是YES)

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView{

    return YES;  
}

  • 已经回到顶部的时候会调用这个方法

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView{

    NSLog(@"回到顶部");
}

缩放相关

  • 告诉scrollView,缩放对象 (返回值就是需要缩放的对象)
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{

    return [scrollView viewWithTag:100];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容