2009-09-18 77 views
5

我一直無法找到這個問題,我有答案。在沒有contentInset的UIScrollView中居中UIImageView?

我有一個UIScrollView內一個UIImageView,我想中心內容垂直。

現在,我已經能夠做到這一點的唯一方法是通過基於的UIImageView大小的高度設置滾動視圖contentInset,但這不是一個完美的解決方案;它只是增加了的UIImageView的大小,使得UIScrollView的「思考」其含量較大,並增加了這些黑條的頂端。

我試圖從得到的幫助:

UIScrollView with centered UIImageView, like Photos app

Center content of UIScrollView when smaller

但一直無法使用這些答案來解決它。

+0

我也苦苦尋找這種修復。看起來沒有簡單的方法來居中scrollView的內容。 – Jonah 2009-09-20 14:08:31

+0

它已被回答? – JoePasq 2010-01-18 00:11:05

回答

1

創建一個單獨的UIView並添加該中心的的UIImageView,然後將視圖添加到滾動視圖

UIView *view = [[UIVIew alloc] initWithFrame:<frame that will fill your scrollview>]; 
CGRect frame = CGRectMake((view.size.width - IMAGE_WIDTH)/2, (view.size.height - IMAGE_HEIGHT)/2, IMAGE_WIDTH, IMAGE_HEIGHT); 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame]; 
imageView.image = [UIImage imageNamed:@"imageSized_IMAGE_WIDTH_by_IMAGE_HEIGHT.png"]; 
[view addSubview:imageView]; 
[imageView release]; 

[scrollView addSubview:view]; 
[view release]; 

請注意,您將需要設置視圖框是你在需要的尺寸和位置滾動視圖。需要注意的重要部分是通過使用視圖框架尺寸作爲變量,將視圖框架內的imageview居中。

+0

這將工作。問題是,如果圖像比UIView小,它將在屏幕上部分滾動。照片應用程序不允許這個,它看起來好多了。 – Jonah 2009-09-19 20:45:55

+1

是的,我看到了約拿在一些應用中討論的問題。我見過的唯一的應用程序能夠做我們想要正確的是蘋果的Photos.app :(到目前爲止,我只是將我的圖像放在UIView中,然後是圖像大小+無論我需要什麼插槽居中UIScroolView不是最優的,因爲它會在頂部和底部添加黑色條紋,如果我移除滾動條(比如Photos.app),看起來會更好一些 – runmad 2009-09-21 18:03:59

4

你可以告訴UIScrollView中通過調用scrollRectToVisible:animated:

例滾動到特定的視圖:

[myScrollView scrollRectToVisible:imageView.frame animated:YES]; 

要垂直居中,試試這個:

1)添加一個空的觀點您scrollview與contentSize的高度相同。

2)你的UIImageView添加到emptyView

2)scrollRectToVisible在這個中心視場。

+0

截圖已損壞 – Besi 2013-02-21 08:17:34

0

contentInset不應該改變的contentSize,它應改變contentOffset。

嘗試設置contentSize,那麼contentInset。同時查看UIScrollView的背景顏色以及可能顯示的背後顏色。我在使用setContentSize,setContentInset和addSubview在UIScrollView中集中UIImageView時沒有任何問題。

1

蘋果已向所有iphone開發者計劃的成員發佈了2010年WWDC會議視頻。討論的主題之一是他們如何創建照片應用程序!他們逐步構建一個非常類似的應用程序,並免費提供所有代碼。

它也不使用私人api。由於不公開協議,我不能在這裏放置任何代碼,但這裏是示例代碼下載的鏈接。您可能需要登錄才能訪問。

http://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?code=y&source=x&bundleID=20645

而且,這裏是iTunes的WWDC頁面的鏈接:

http://insideapple.apple.com/redir/cbx-cgi.do?v=2&la=en&lc=&a=kGSol9sgPHP%2BtlWtLp%2BEP%2FnxnZarjWJglPBZRHd3oDbACudP51JNGS8KlsFgxZto9X%2BTsnqSbeUSWX0doe%2Fzv%2FN5XV55%2FomsyfRgFBysOnIVggO%2Fn2p%2BiweDK%2F%2FmsIXj

6

此代碼應在iOS上的大多數版本的工作(並已經過測試,在3.1工作向上,這是我目前可以訪問的)。

它基於Jonah的答案中提到的蘋果WWDC代碼。

添加以下到您的UIScrollView的子類,以及包含圖像或磚視圖替換tileContainerView:

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    // center the image as it becomes smaller than the size of the screen 
    CGSize boundsSize = self.bounds.size; 
    CGRect frameToCenter = tileContainerView.frame; 

    // center horizontally 
    if (frameToCenter.size.width < boundsSize.width) 
     frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width)/2; 
    else 
     frameToCenter.origin.x = 0; 

    // center vertically 
    if (frameToCenter.size.height < boundsSize.height) 
     frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height)/2; 
    else 
     frameToCenter.origin.y = 0; 

    tileContainerView.frame = frameToCenter; 
} 
+0

我正在研究iPad應用程序並希望將圖像居中顯示在DetailView中,我沒有將UIScrollView子類化,而是將這段代碼添加到了shouldAutorotateToInterfaceOrientation中,現在它在橫向和縱向模式下都能正常工作,感謝分享。 – Sushant 2011-01-19 11:13:55

相關問題