iOS開發(fā)中出現(xiàn)頻率高的二個(gè)框架分別是tableView和CollectionView,但是他們都是繼承于ScrollView。這里整理了一下ScrollView控件的使用
1 UIScrollView控件是什么?
(1)移動設(shè)備的屏幕??是極其有限的,因此直接展示在用戶眼前的內(nèi)容也相當(dāng)有限
(2)當(dāng)展?的內(nèi)容較多,超出?個(gè)屏幕時(shí),用戶可通過滾動手勢來查看屏幕以外的內(nèi)容
(3)普通的UIView不具備滾動功能,不能顯示過多的內(nèi)容
(4)UIScrollView是一個(gè)能夠滾動的視圖控件,可以用來展?大量的內(nèi)容,并且可以通過滾 動查看所有的內(nèi)容
2 UIScrollView的簡單使用
(1)將需要展?的內(nèi)容添加到UIScrollView中
(2)設(shè)置UIScrollView的contentSize屬性,告訴UIScrollView所有內(nèi)容的尺寸,也就是告訴 它滾動的范圍(能滾多遠(yuǎn),滾到哪里是盡頭)
3 屬性
常用屬性:
1)@property(nonatomic)CGPointcontentOffset; 這個(gè)屬性用來表?UIScrollView滾動的位置
2)@property(nonatomic)CGSizecontentSize;這個(gè)屬性用來表?UIScrollView內(nèi)容的尺?寸,滾動范圍(能滾多遠(yuǎn))
3)@property(nonatomic)UIEdgeInsetscontentInset;這個(gè)屬性能夠在UIScrollView的4周增加額外的滾動區(qū)域
其他屬性:
1)@property(nonatomic) BOOL bounces; 設(shè)置UIScrollView是否需要彈簧效果
2)@property(nonatomic,getter=isScrollEnabled)BOOLscrollEnabled;設(shè)置UIScrollView是否能滾動
3)@property(nonatomic) BOOL showsHorizontalScrollIndicator; 是否顯示水平滾動條
4)@property(nonatomic) BOOL showsVerticalScrollIndicator; 是否顯示垂直滾動條
4 實(shí)例代碼
#import "ViewController.h"
@interface ViewController ()
{
UIScrollView *_scrollView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 1.創(chuàng)建UIScrollView
UIScrollView *scrollView = [[UIScrollView alloc] init];
scrollView.frame = CGRectMake(0, 20, 350, 350); // frame中的size指UIScrollView的可視范圍
scrollView.backgroundColor = [UIColor grayColor];
[self.view addSubview:scrollView];
// 2.創(chuàng)建UIImageView
UIImageView *imageView = [[UIImageView alloc] init];
imageView.image = [UIImage imageNamed:@"1.jpg"];
CGFloat imgW = imageView.image.size.width; // 圖片的寬度
CGFloat imgH = imageView.image.size.height; // 圖片的高度
imageView.frame = CGRectMake(0, 0, imgW, imgH);
[scrollView addSubview:imageView];
// 設(shè)置UIScrollView的滾動范圍(內(nèi)容大小)
scrollView.contentSize = imageView.image.size;
// 隱藏水平滾動條
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
// 偏移量
scrollView.contentOffset = CGPointMake(0, 100);
// 去掉彈簧效果
// scrollView.bounces = NO;
// 增加額外的滾動區(qū)域
scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20);
_scrollView = scrollView;
}
5 frame,contentOffset,contentSize,contentInset之間的關(guān)系

(1)UIScrollView的frame與contentsize屬性的區(qū)分:UIScrollView的frame指的是這個(gè)scrollview的可視范圍(可看見的區(qū)域),contentsize是其滾動范圍。
(2)contentinset(不帶*號的一般不是結(jié)構(gòu)體就是枚舉),為UIScrollView增加額外的滾動區(qū)域。(上,左,下,右)逆時(shí)針。contentinset可以使用代碼或者是視圖控制器進(jìn)行設(shè)置,但兩者有區(qū)別(注意區(qū)分)。
(3)contentsize屬性只能使用代碼設(shè)置。
(4)contentoffset是個(gè)CGpoint類型的結(jié)構(gòu)體,用來記錄ScrollView的滾動位置,即記錄著“框”跑到了哪里。知道了這個(gè)屬性,就知道了其位置,可以通過設(shè)置這個(gè)屬性來控制這個(gè)“框”的移動。
(5)不允許直接修改某個(gè)對象內(nèi)部結(jié)構(gòu)體屬性的成員,三個(gè)步驟(先拿到值,修改之,再把修改后的值賦回去)。
(6)增加了額外區(qū)域后,contentoffset的原點(diǎn)發(fā)生變化
參考文章 UIScrollView控件介紹