2012-12-13 3 views
1

나는 UIPageControl과 함께 사용하여 가로로 스 와이프 할 때 다른 페이지를 사용하고자하는 UIScrollView을 가지고 있습니다. 모든 페이지마다 UITextView과 숫자가 UIImageView이되어야합니다. ViewController 나는 데이터가 도착하면 다음과 같이 내가 항목을 추가 할 웹 서비스 및 전화 내에서 는 :UIScrollView 및 UIPageControl을 올바르게 사용하는 방법은 무엇입니까?

for(int i=0;i<[arrData count];i++) { 
    NSString *[email protected]"Dummy text"; 

    CGRect frame; 

    frame.origin.x = self.scrollView.frame.size.width * i; 
    frame.origin.y = 0; 
    frame.size.width = self.scrollView.frame.size.width; 
    frame.size.height = 40; //vedere landscape 

    UILabel *label = [[UILabel alloc] initWithFrame:frame]; 
    [label setText:body]; 
    label.numberOfLines=0; 
    [label sizeToFit]; 
    label.autoresizingMask=UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    [self.scrollView addSubview:label]; 

    [label setBackgroundColor:[UIColor whiteColor]]; 
    [self.scrollView addSubview:label]; 
    int y_pos=label.frame.size.height+10; 
    int x_pos=0; 
    for(int img=0; img<[[[arrData objectAtIndex:i]objectForKey:@"images"] count]; img++) { 
     NSString *imageURL=[[[[arrData objectAtIndex:i] objectForKey:@"images"] objectAtIndex:img] objectForKey:@"fn"]; 

     NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]]; 
     UIImage *image = [UIImage imageWithData:imageData]; 
     UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 
     [imageView setFrame:CGRectMake(self.scrollView.frame.size.width * i+img*100, y_pos, image.size.width, image.size.height)]; 
     [self.scrollView addSubview:imageView]; 

    } 

} 
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * [arrData count], self.scrollView.frame.size.height); 

는 세로 잘 실행되지만 장치가 회전 할 때, 분명히, 레이아웃은 ... 파괴되는 을 PageControl과 함께 사용하는 가장 좋은 방법은 무엇입니까? 회전을 처리하고 삽입 된 항목 사이의 거리를 변경해야합니까 (아니면 제 생각에는) 모든 것을 빌드하는 더 좋은 방법이 있습니까?

+1

autolayout을 사용하고 있습니까? 그렇다면 프레임을 설정하는 대신 제약 조건을 사용하십시오. 또는 레이아웃을 완전히 제어하려는 경우 (회전 할 때 프레임을 새 값으로 설정) 회전을 처리해야합니다. pagecontrol에서 scrollview와 함께 autolayout을 사용하고 있으며 회전이 잘 작동합니다 (추가 코드 필요 없음). – yuf

+0

사실 저는 autolayout을 사용하지 않습니다. – Cris

+1

레이아웃이 엉망이라는 것은 무엇을 의미합니까? 설정 한 프레임이 변경 되나요? 아니면 그것이 무엇을 해야하는지 (프레임은 동일하게 유지됩니다)하지만 나쁘게 보입니까? – yuf

답변

1

예 유연한 너비는 가로 모드의 양쪽에서 scrollview의 너비를 늘리므로 가로 스크롤이있을 때 내용이 겹쳐져 문제가 발생하기 때문에 방향이 바뀔 때마다 다시 scrollviews 프레임을 설정해야합니다. 당신이 할 수있는 한 가지는 scrollview의 automatic resizing mask를 flexibleRightMargin | flexibleLeftMargin으로 설정하는 것입니다. 스크롤 뷰의 내용은 중앙에 유지되지만 스크롤은 깨끗하게 보이지 않습니다.

관련 문제