2013-08-02 42 views
2

我想讓我的培訓應用程序中的UIScrollView工作。滾動本身工作正常,但如果我使用的是導航控制器,則SVC的內容區域會向下移動以獲取導航欄高度。導航控制器中的UIScrollView

without nav controller with nav controller

青色面積的UIScrollView背景。 contentSize設置正確,只允許頁面左右滑動。這是我如何添加圖像滾動視圖

CGSize scrollViewSize = self.scrollView.frame.size; 

UIImage * image = [UIImage imageWithContentsOfFile:[cachesDirectory stringByAppendingFormat:@"/%@", fileName]]; 

CGFloat imageOriginalWidth = image.size.width; 
CGFloat imageOriginalHeight = image.size.height; 

CGFloat imageOffsetX = 10; 

CGFloat imageDisplayedWidth = scrollViewSize.width - (2 * imageOffsetX); 
CGFloat imageDisplayedHeight = imageOriginalHeight/imageOriginalWidth * imageDisplayedWidth; 

CGFloat imageOffsetY = (scrollViewSize.height - imageDisplayedHeight)/2; 

CGRect viewFrame = CGRectMake(scrollViewSize.width * (filmIndex) + imageOffsetX, 
           imageOffsetY, 
           imageDisplayedWidth, 
           imageDisplayedHeight); 

contentAreaHeight = imageDisplayedHeight; 

UIImageView * view = [[UIImageView alloc] initWithFrame:viewFrame]; 
view.backgroundColor = [UIColor greenColor]; 
view.image = image; 
view.contentMode = UIViewContentModeScaleAspectFit; 
view.tag = filmIndex; 

[self.scrollView addSubview:view]; 

而且我這是怎麼設置的內容的大小和偏移

self.scrollView.contentSize = CGSizeMake(scrollViewSize.width * ([self.filmsData count]), 
             contentAreaHeight); 
self.scrollView.contentOffset = CGPointMake(scrollViewSize.width * [self.filmsData count]/2, 
              0); 

如何有什麼錯我的代碼,並使用時,我怎樣才能得到的圖像垂直居中導航控制器?

+0

這段代碼是從哪裏調用的?我的猜測是你在'-viewDidLoad'中這樣做。 –

+0

@JefferyThomas你是對的,它是從'-viewDidLoad'調用的。你不是說在'-viewDidLoad''框架中沒有設置,我應該將它移動到'-viewWillAppear'? – mrvn

回答

1

您可以在-viewDidLoad中創建並添加視圖,但您需要使用自動調整大小或手動設置-viewWillAppear:或其他一些在調整self.view大小後觸發的方法。

Bounds and Frame size in viewDidLoad

+0

很好的答案,謝謝。這是我第一次體驗iOS,我完全忘記了這種差異 – mrvn

0

首先,這是什麼?

scrollViewSize 

你必須在2-3的地方使用它,就像這裏:

CGFloat imageDisplayedWidth = scrollViewSize.width - (2 * imageOffsetX); 

,如果它是你的滾動視圖的幀的大小的話,你最好使用簡單

self.scrollView.frame.size 

否則..我不能讓你..

其次,當你的UINavigationBar對象進入視圖時,它「吃」我的空間你的屏幕。默認情況下,它的高度是44像素(在非視網膜中)。

因此,您的其他視圖和子視圖也向下移動。即使你的主視圖下移了44分,所以,這就是爲什麼你的整個視圖與你的scrollView和你的圖像一起下移的原因。但是,你的視角高度仍然是460!(在iPhone 4,4S中),額外的44點超出了你的屏幕範圍..即。從屏幕的底部出來(所以它應該從手機的底部出來)!!)所以你必須注意它也...

我會建議你做的是 設置滾動型的框架,以降低高度:這些行添加到您的代碼..更好地在你的方法開始添加:

`self.scrollview.frame=CGRectMake(0,0,320,self.view.frame.size.height-44) 

// if it is the default navigation bar.. otherwise you can subtract that height which you created in your custom bar

所有其他的事情應該可以正常工作,根據你的代碼.. 請給出一個反饋..如果你使用它:]