2011-10-05 3 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의 실제 스크롤 뷰에 연결하면 자동으로 올바른 주소가 할당된다는 가정하에있었습니다. 이것은 틀린가? 이 경우보기의 주소를 얻으려면 어떻게해야합니까?

- 업데이트 -
모든 의견을 보내 주셔서 감사합니다. 모두가 제안한대로 모든 것을 확인했는데 모두 틀렸어. NIB에서 다른 더미 레이블 (스크롤이 작동하는지 테스트하기 위해)을 가지고 있었기 때문에 내용의 크기를 설정할 필요가 없었습니다. 하지만 나중에 기억할 것입니다 :-)

흥미롭게도 코드를 다시 확인하고 변경하지 않은 후에 다시 실행 했으므로 작동했습니다.

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

을이 경우에해야 크기 : 내가 그것을 알아낼 경우 확실하지 왜하지만 난 당신이있는 ScrollView를 사용하는 경우

+0

[super viewDidLoad]를 (를) 먼저 호출 하시겠습니까? – Colin

+0

더 많은 코드를 게시 할 수 있습니까?특히, a) UIScrollView 인스턴스를 초기화 한 방법과 b) scrollView를 self.view에 연결 한 부모 ViewController의 지점에 관심이 있습니다. 감사! –

+0

@AsimIhsan 동적으로 스크롤 뷰 자체를 만들지 않았고 하위 뷰만 만들었습니다. Interface Builder를 사용하여 UIViewController 내에서 스크롤 뷰를 생성하고 다른 방법으로 작업 할 수 없기 때문에 거기에 설정합니다. – richard

답변

3

당신이 수행하여 콘텐츠 크기를 설정해야합니다 ... 이유를 게시합니다 수 더 큰 당신이

귀하의 질문에 설명 된대로 당신은 당신이 XIB에 추가 한있는 ScrollView로 작업

2

도움이 희망 라벨을보고 싶어 경우 50,50.

콘센트를 IBOultlet으로 선언하면 UIScrollView * scrlvDynamicContent;

인터페이스 빌더의 scrollview에 연결하면 viewdidLoad 메서드가 호출 된 후 할당 된 scrollview가 표시됩니다.

그래서 그냥 scrlvDynamicContent가 파일 소유자로 설정된 콘센트에 제대로 연결되어 있는지 확인

-(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)]; 

} 

을 다음과 같이 동적 뷰를 생성 할 수 있습니다

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

로 일을하고

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]; 
관련 문제