2009-10-05 113 views
20

我有我的所有控件在界面生成器(許多標籤,按鈕等)佈局。我如何將它們全部放入界面生成器的滾動視圖中,以便我可以獲得更多空間並能夠上下滾動以顯示更多控件?我必須以編程方式執行此操作嗎?如何將UIScrollView添加到Interface Builder?

回答

30

打開包含所有控件和標籤等的視圖(在Interface Builder中)。全選。然後在編輯器菜單下,選擇嵌入,然後選擇滾動視圖。

注意:在舊的Xcode版本中,這是在佈局菜單下,然後嵌入對象...(滾動視圖)。

+0

馬克·w ^打我給它。 – mahboudz 2009-10-05 17:32:20

+2

這不符合預期。現在一切都在UIScrollView下,但是當我加載應用程序時,沒有什麼可滾動的。爲什麼? – erotsppa 2009-10-06 02:33:01

+10

在IB中,請確保滾動視圖足夠小,以便在應用運行時,視圖中可以看到整個視圖。換句話說,它的邊界/框架需要小於或等於它所在的視圖。 然後,在您的應用程序中,您需要使用所有按鈕,標籤等設置視圖的scrollview.contentSize =大小。這將比您爲滾動視圖設置的框架/邊界更大。 如果一切正常,那麼你應該可以在沒有其他工作的情況下進行滾動。 – mahboudz 2009-10-06 03:20:05

3

選擇您想要放入滾動視圖中的所有對象並轉到佈局菜單,選擇「嵌入對象」並選擇「滾動視圖」。

25

我首選的方案,在這裏你不需要硬編碼的contentSize的大小:


注意:您可能能夠避免這種源代碼部分使用這裏的伎倆:https://stackoverflow.com/a/11239123/153422 - 雖然我還沒有嘗試過。

這一招的其餘部分...你仍然需要使用反正


  1. 全部移動控制到一個單一的UIView(在IB:全選,然後去佈局>嵌入對象中。 ..>查看)

  2. 接管該單一的UIView使用一個IBOutlet屬性的源代碼(見下文)

  3. 源代碼,而不是接口生成器(IB是打破了這裏,它有錯誤,它錯誤地設置了UIScrollView的原點 - 它試圖將視圖居中。蘋果從來沒有打算檢查它的基本錯誤,感嘆):將單個UIView移動到UIScrollView(見下面的代碼)。

  4. 使用sizeThatFits來「自動」設置正確的大小。

代碼(StackOverflow上不會讓我把代碼編號列表內的感嘆。)

頭文件

/** outlet that you hook up to the view created in step 1 */ 
@property(nonatomic, retain) IBOutlet UIView *masterView; 

類文件:

/** inside your viewDidLoad method */ 
[scrollview addSubview: masterView]; // step 3 
scrollView.contentSize = [masterView sizeThatFits:CGSizeZero]; // step 4 

.. 。儘管我最近沒有檢查過它,IIRC它同時適用於2.x和3.x

+0

該解決方案效果很好。感謝發佈 – JoshHighland 2010-10-07 00:21:24

+0

這也適用於4.x - 我仍然在應用程序中使用它,沒有任何問題。 – Adam 2010-10-23 17:00:44

+0

這適用於iOS 4.2上的iPhone。別忘了UIScrollView的高度應該與ViewController的頂級UIView相同或相等。我一直在擺弄設置,忘記把它改回來。感到困惑,因爲它似乎仍然反彈到錯誤的位置。 – 2010-12-07 21:43:41

4

它很容易:

首先爲您的視圖添加一個滾動視圖。 更改滾動視圖的大小(例如,使其長700像素)。 開始放置您的控件 當您想要在較低(不可見)部件中放置/編輯控件時,請選擇滾動視圖並將Y開始位置更改爲-300。 Voila。 編輯後將Y開始位置設回0或其它值。

+0

或者,您可以增加尺寸,然後再減小尺寸。滾動會很好,但我並不感到驚訝,它沒有實現 – Casebash 2010-09-16 11:45:34

+0

如果你這樣做,那麼你還必須手動(重新)設置滾動視圖的「框架」的大小爲頁面的視圖大小(視圖門戶)和將「contentSize」設置爲總內容大小。後者默認爲0,0,如果contentSize不大於frame.size,則不會發生滾動。這是另外一個好策略,非常感謝! – 2012-03-16 18:19:50

1

雖然這個問題很老了,我會建議一個解決辦法,我發現我有同樣的問題,沒能找到多少幫助那裏:

當IB,如果你想將物體420像素之外,只要在選擇所有狀態欄,上欄,其中包含與所有對象滾動視圖查看底部欄的未指定的肯定自己。這樣,您就可以手動調整屏幕大小(對於視圖)。然後,您可以按照調整滾動查看^h值,可以使用所有其他的對象,與他們一起工作Ximonn的意見,然後,撤消更改爲^h值,然後設置需要的吧。

0

我一直在尋找這幾天,我終於碰到這個網站來了,對我工作的解決方案。

Scrolling with UIScrollView

基本上你有你在這一個UIScrollView客體主視圖。然後是另一個內容視圖,其中包含您的所有內容。然後將內容視圖添加到滾動視圖。然後最後將滾動視圖的內容大小設置爲內容視圖的大小。

1

重要的小東西。 要在UIScrollView中滾動大的子視圖(例如UIImageView),請記住,對於此子視圖,取消選中InterfaceBuilder - > View窗口中的「User Interaction Enabled」複選框。或者以編程方式進行。

subview.userInteractionEnabled = NO; 

否則這個子視圖將疊加在屏幕上沒有任何影響。

0

我知道,這個線程是一個年紀大一點......但有人能找到它的谷歌,它的HIGHT排名。 我寫了這個小輔助方法來完成這項工作:

- (void)addSubview:(UIView *)theSubView toScrollView:(UIScrollView *)theScrollView 
{ 
    [theScrollView addSubview:theSubView]; 
    theScrollView.contentSize = theSubView.bounds.size; 
} 

你只需要在標題中聲明兩個IBOutlet中的(例如,contentViewscrollView),並調用這樣的方法,等。無論您想加載UIView與你的源代碼一個UIScrollView

[self addSubview:contentView toScrollView:scrollView];

我把它叫做在viewDidLoad中

這種方法功能的iOS

4

我不知道,如果這只是我,但我試圖按照每個這裏的其他答案的指示,沒有一次成功。沒有一個答案包含了所有需要的東西,我猜每個答案都假設我們知道要做一些事情,所以就把這一部分留下來。我終於想通了與red artisan.所以......我在這裏上市的所有必要的步驟獲得的幫助這項工作:

  1. InterfaceBuilder下,添加一個視圖,然後添加你控制它(或如果您的控件已經存在於主視圖中,則可以選擇所有控件,然後轉到編輯器|嵌入|視圖,然後拖動該新視圖,使其全部位於主視圖之外)。此視圖可以是任何你喜歡的尺寸。

  2. 在InterfaceBuilder中,將一個滾動視圖添加到您的主視圖中,並調整它以佔據整個主視圖。

  3. 將下面列出的代碼添加到您的UIViewController標題和類文件中。

  4. 在InterfaceBuilder中,將包含控件的視圖掛接到文件所有者中的'contentView'。將Scroll View連接到文件所有者的'scrollView'。

頭文件:

 
    @interface MyViewController : UIViewController 
    @property(nonatomic, retain) IBOutlet UIScrollView *scrollView; 
    @property(nonatomic, retain) IBOutlet UIView *contentView; 

類文件:

 
    @synthesize scrollView, contentView; 

    - (void)viewDidLoad 
    { 
     [super viewDidLoad];  
     [self.scrollView addSubview:self.contentView]; 
     self.scrollView.contentSize = self.contentView.bounds.size; 
    } 

    - (void)viewDidUnload 
    { 
     self.scrollView = nil; 
     self.contentView = nil; 
     [super viewDidUnload]; 
    } 
0

選擇的答案很適合的Xcode 3

然而,Xcode的4,菜單已被重新稍微安排一下。

要做到在Xcode 4的相同選擇你的意見,然後使用:

編輯>嵌入>滾動查看

相關問題