IOS ScrollView

hqman發表於2015-05-11

scroll View很重要 app當中隨處可見,分頁,tableview 圖片放大等

frame bounds區別

都是表示位置和大小
frame 在父View 座標系中,bounds在自己的座標系中

ContentSize Contentoffset

ContentSize :scrollview 初始化時候要設定 需要滾動檢視的大小

Contentoffset 是滾動之後位置偏移量 跟scroll view bounds保持一致

Demo

@interface ScrollVC() <UIScrollViewDelegate>
@property (strong ,nonatomic) UIScrollView * scrollView;
@property (strong ,nonatomic) UIImageView * imageView;
@end

@implementation ScrollVC
- (void)viewDidLoad {
    [super viewDidLoad];
    self.imageView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"bigPic"]];
    self.scrollView=[[UIScrollView alloc]initWithFrame:self.view.bounds];

    self.scrollView.backgroundColor=[UIColor blackColor];
    self.scrollView.contentSize=self.imageView.bounds.size;

    [self.view addSubview:_scrollView];
    [self.scrollView addSubview:_imageView];
    self.scrollView.delegate=self;




    [self setScale];
}


// 設定 scroll
-(void)setScale{
    CGSize boundSize=self.scrollView.bounds.size;
    CGSize imageSize=self.imageView.bounds.size;

    float xScale=boundSize.width/imageSize.width;
    float yScale=boundSize.height/imageSize.height;
   //計算 適合螢幕 寬度 或者 高度的比例大小 fit 模式
    float zoomScale=MIN(xScale, yScale);
    //_scrollView.frame=self.view.bounds;
    _scrollView.minimumZoomScale=zoomScale;
    //開始 大小比例
    _scrollView.zoomScale=zoomScale  ;
    _scrollView.maximumZoomScale=3.0;

    //CGSize boundSize=self.scrollView.bounds.size;
    CGRect frameToCenter=_imageView.frame;
    //設定 imageView 被scroll的這個檢視 居中螢幕
    if(frameToCenter.size.width<boundSize.width){
        frameToCenter.origin.x=(boundSize.width-frameToCenter.size.width  )/2;
    }
    if (frameToCenter.size.height<boundSize.height) {
        frameToCenter.origin.y=(boundSize.height-frameToCenter.size.height  )/2;

    }
    _imageView.frame=frameToCenter;

}

#pragma UIScrollViewDelegate

//設定那個view 需要 放大縮小
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
    return _imageView;
}

//螢幕 橫向 變化 或者 view 大小變化
-(void)viewWillLayoutSubviews{

     [self setScale];
}

ContentInset使用

當scroll view 被navigationbar 擋住時候 往下移位設定

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0,CGRectGetHeight(_myMsgInputView.frame), 0.0);
    self.scrollView.contentInset = contentInsets;
contentInset實際上是內容的padding 比如tableview 底部如果不設padding 就會被tabbar 擋住

UIEdgeInsetsMake順序為 上 左 下 右

scrollview 鍵盤顯示內容遮擋問題

TPKeyboardAvoiding 這個包 封裝 鍵盤 show hide 動態修改scroll 的 contestinset來解決問題。
https://github.com/michaeltyson/TPKeyboardAvoiding

相關文章