2011-10-05 88 views
6

我在動態添加子視圖到UIScrollView時遇到了很多麻煩。滾動視圖對在NIB中創建的內容工作正常,但由於要顯示的子視圖取決於我的應用程序中的數據(圖像,標籤,單選按鈕等的混合),我需要能夠動態地創建和顯示它們。在UIScrollView中動態添加子視圖不出現

根據我讀過的所有內容,它在各種網站和Apple文檔中都顯得非常簡單。在視圖控制器的viewDidLoad,我已經添加了下面的代碼,

UILabel *testLabel = [[UILabel alloc] init]; 
[testLabel setFrame:CGRectMake(50, 50, 100, 40)]; 
[testLabel setText:@"My Test label"]; 
[scrollView addSubview:testLabel]; 

[testLabel release]; 

標籤將不會出現在滾動視圖在所有的,但如果我添加了testLabel到self.view,隨後便出現(但不是在滾動內容顯然)。我甚至嘗試將代碼添加到viewDidAppear中,以防我誤解了沒有運氣的事件順序。

當我檢查調試器時,我注意到滾動視圖的地址是0x0,我認爲它的意思是null,由於某種原因,這可以解釋爲什麼它不工作。我假設如果我將這個scrollView指針連接到IB的實際滾動視圖,它會自動分配正確的地址。這是不正確的?如果是這種情況,我該如何獲取視圖的地址?

- UPDATE -
感謝您的所有反饋。我按照每個人的建議檢查了一切,當然這一切都是正確的。我不需要設置內容的大小,因爲我在NIB中有一些其他虛擬標籤(用於測試滾動是否正常)。但我會記住,在以後的日子裏:-)

有趣的是,雖然在再次檢查代碼並沒有做任何改變之後,我再次運行它,它只是工作!不知道爲什麼,但我會後的原因如果我看着辦吧......

+0

您是先撥打[super viewDidLoad]嗎? – Colin

+0

你可以發表更多的代碼嗎?特別是,我對a)如何初始化UIScrollView實例感興趣,以及b)您已將scrollView附加到self.view的父ViewController中的位置。謝謝! –

+0

@AsimIhsan我沒有動態創建滾動視圖本身,只有子視圖。我使用Interface Builder在UIViewController中創建了滾動視圖,並將其設置在那裏,因爲我無法以其他方式使用它。 – richard

回答

3

當您使用滾動視圖,你需要通過執行來設置內容大小:

scrollView.contentSize = CGSizeMake(@width,@height); 

在這種情況下應該大小更大,如果你想看到的標籤

希望它幫助

2

正如你的問題描述您與您的廈門國際銀行已經添加了一個滾動視圖工作50,50。

當你聲明一個插座爲IBOultlet UIScrollView * scrlvDynamicContent;

並將其連接到界面生成器中的滾動視圖,理想情況下,您將在調用viewdidLoad方法後獲得分配的滾動視圖。

這樣的東西作爲

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    [self createDynamicView]; 
} 

在那裏你可以按照如下

-(void)createDynamicView{ 

    CGFloat yOffset = 0; 

    for (int i=0;i<5;i++) { 
     yOffset += 5; 
     UILabel* lblHeaderTitle = [[UILabel alloc] initWithFrame:CGRectMake(8, yOffset, 310, 21)]; 
     [lblHeaderTitle setTextAlignment:UITextAlignmentLeft]; 
     [lblHeaderTitle setFont:[UIFont fontWithName:@"Helvetica-Bold" size:16.0f]]; 
     [lblHeaderTitle setText:[currentDict valueForKey:@"TITLE"]]; 
     [lblHeaderTitle setTextColor:[UIColor blackColor]]; 


     [scrlvDynamicContent addSubview:lblHeaderTitle]; 
     [lblHeaderTitle release]; 
     //INCREMNET in yOffset 
     yOffset += 25; 

    [scrlvDynamicContent setContentSize:CGSizeMake(320, yOffset)]; 

} 

只要確保scrlvDynamicContent已正確連接到其出口設置爲它的文件所有者生成動態視圖

0
[scrollView setFrame:CGRectMake(0,0,320,460)]; 
[scrollView setContentSize:CGSizeMake(100, 40)]; 
[self.view addSubview:scrollView]; 


UILabel *testLabel = [[UILabel alloc] init]; 
[testLabel setFrame:CGRectMake(50, 50, 100, 40)]; 
[testLabel setText:@"My Test label"]; 


[scrollView addSubview:testLabel]; 

[testLabel release];