1. 程式人生 > >scrollView 向下偏移64個點的問題以及 scrollView 縮放的問題

scrollView 向下偏移64個點的問題以及 scrollView 縮放的問題

第一個問題:scrollView 向下偏移的問題

原因

在iOS7之前是沒有這個問題的,後來蘋果更新出自動適配,在控制器裡增加了一個新屬性automaticallyAdjustsScrollViewInsets預設為YES,通過字面意思大家應該就發現了,開啟ScrollView自動調整,就是如果是在nav下的ScrollView裡的子View會自動向下偏移64個點。

解決

不讓系統自動適配,將automaticallyAdjustsScrollViewInsets設定成NO。

程式碼:
self.automaticallyAdjustsScrollViewInsets = NO;

或者 storyboard 設定:



第二個問題:scrollView 縮放問題

我們通常會將 imageView 放在 scrollView 裡通過代理方法實現圖片的縮放

//1、設定代理及縮放比例
_mainScrollView.delegate = self; 
_mainScrollView.maximumZoomScale = 3.0;
_mainScrollView.minimumZoomScale = 1.0;
//2、實現代理方法
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
    return _mainImageView;
}

到這裡就可以實現圖片的縮放了,但是你會發現縮放後圖片位置不是我們預想的那樣,而是會跑偏,這是因為圖片放大後,圖片的frame的 x、y值也會按比例縮放,所以就跑偏了。解決辦法就是要實現下面的代理方法。

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
    
    CGRect frame = self.mainImageView.frame;
    
    frame.origin.y = (self.mainScrollView.frame.size.height - self.mainImageView.frame.size.height) > 0 ? (self.mainScrollView.frame.size.height - self.mainImageView.frame.size.height) * 0.5 : 0;
    frame.origin.x = (self.mainScrollView.frame.size.width - self.mainImageView.frame.size.width) > 0 ? (self.mainScrollView.frame.size.width - self.mainImageView.frame.size.width) * 0.5 : 0;
    self.mainImageView.frame = frame;
    
    self.mainScrollView.contentSize = CGSizeMake(self.mainImageView.frame.size.width, self.mainImageView.frame.size.height);
}