3

프레임이 부모 프레임으로 자동 변경되도록 ChildViewController보기에 문제가 있습니다. 어떻게 진행되는지를 설명하기 위해 하나의 클래스로 예제 프로젝트를 만들어 보았습니다. 간단히 말해서 프레임을 잘못 변경하는 UIScrollView Subview 컨테이너

, I : - 나는 프레임 컨테이너에 UIView를 만들 수있는 viewDidLoad을 에서

  • 는 ScrollViewController는
  • RootViewController로 ScrollViewController을 추가하고 ScrollViewController에서 창
  • 에 추가해야 {{0, 0}, {72704, 768}}
  • 프레임이 {0, 0}, {1024, 768} 인 UIScrollView 만들기
  • ScrollViewController보기
  • 에있는 ScrollView는
  • 이의 프레임 (71) UIViewControllers 만들기있는 ScrollView에 컨테이너를 추가 {{0, 0}, {1024, 768}}
  • ScrollViewController
  • 의 ChildViewControllers로 추가 ViewDidAppear
  • 각 프레임은에 컨테이너
  • 로그에 모두 71 개 프레임을 자신의 하위 뷰를 추가 {{0, 0}, {72704, 768}} 금지 - 나는 세트를 1024 x 768.

모든 자동 크기 조정 마스크/하위보기가 아니오로 설정됩니다.

이것은 iOS 6에서 실행 중이지만 iOS 5.1에서도 발생합니다!

업데이트! addChildViewController가 어떻게 든 발생합니다. 이유는 확실하지 않습니다 -이 예상되는 동작입니까? 자신의 뷰 프레임을 부모에게 자동으로 확장하지 않고도이 childViewController를 ScrollViewController에 추가 할 수 있어야합니다. 이론적으로 이것을하는 방법이 아닌가?

기타 - NIB는 어디에도 없습니다. Scrollview/ContainerView와 71 개의 VC 뷰 각각에서 "translatesAutoresizingMaskIntoConstraints"를 NO로 설정하십시오. 같은 일, 불행히도. 이

링크 프로젝트에 ... 아주 이상한 행동처럼 보인다 - ScrollViewController FROM https://dl.dropbox.com/u/637000/TestingBug.zip

CODE :

- (void)viewDidLoad 
    { 
     [super viewDidLoad]; 

     [self initScrollView]; 
     [self createTestViews]; 
    } 

    - (void)initScrollView { 
     if(scrollView == nil) { 
      containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 72704, 768)]; 
      containerView.autoresizingMask = UIViewAutoresizingNone; 
      containerView.autoresizesSubviews = NO; 

      scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]; 
      scrollView.autoresizingMask = UIViewAutoresizingNone; 
      scrollView.showsHorizontalScrollIndicator = NO; 
      scrollView.showsVerticalScrollIndicator = NO; 
      scrollView.autoresizesSubviews = NO; 
      scrollView.delegate = self; 

      [self.view addSubview:scrollView]; 
      [scrollView addSubview:containerView]; 
     } 
    } 

    - (void)createTestViews { 
     for(int count = 0; count < 71; count++) { 
      [self createTestView]; 
     } 
    } 

    - (void)createTestView { 
     UIViewController *testVC = [[UIViewController alloc] init]; 
     testVC.view.frame = CGRectMake(0, 0, 1024, 768); 

     [self addChildViewController:testVC]; 
     [containerView addSubview:testVC.view]; 
     [testVC didMoveToParentViewController:self]; 
    } 

    - (void)viewDidAppear:(BOOL)animated { 
     [super viewDidAppear:animated]; 

     for(UIView *subview in containerView.subviews) { 
      // THIS IS {{0, 0}, {72704, 768}} NOT 1024 x 768 
      NSLog(@"BROKEN FRAME = %@", NSStringFromCGRect(subview.frame)); 
     } 
    } 

답변

3

IOS 7.0에서는 self.automaticallyAdjustsScrollViewInsets = NO를 사용하십시오. in ViewDidLoad

+0

그냥 필요한 것! – chrs

3

은의 프레임 (71) UIViewControllers 만들기 {{0, 0} , {1024, 768}}

와우! 이 소리는 UIViewController를 완전히 불필요하게 사용하는 것과 같습니다. 그것없이 관리 할 수 ​​있습니까? 보통 UIViewController를 포함하는 foo없이 스크롤 뷰에 뷰를 직접 추가하는 것이 일반적입니다.

직접 질문에 답하는 것이 좋습니다. 자동 열람 참여가 필요한가요? Xcode 4.5에서 생성 된 새로운 펜촉은 기본적으로 yes입니다.) 나는 당신이 translatesAutoresizingMaskIntoConstraints을 NO로 설정하는 것을 보지 않는다. 따라서 autolayout이 부분을 재생하고 있다면 아마 크기를 조절할 것이다. 물론 어떤 autoresizingMask도 시작하도록 설정하지 않으므로 책임지지 않는 기본값을 얻게됩니다.

+0

이 문제의 근본 원인은 응용 프로그램을 동적으로 작성하는 것을 지원할 수있는 복잡한 프레임 워크에 있습니다. 문제의 71 개 VC는 이론적 인 컨테이너 VC이며 필요한 경우보기를로드 및 언로드 할 수 있습니다. 그것들은 어떤 구조라도 될 수 있습니다. 코드에서 모든 것이 생성됩니다 - NIB는 없지만 현재 제네릭 자동 생성 펜촉을 두 번 확인합니다. 번역도 시도해 보도록하겠습니다. 자동 리사이징 마스크가되었습니다! 감사. –

+0

어디서나 NIB가 없습니다. Scrollview/ContainerView와 71 개의 VC 뷰 각각에서 "translatesAutoresizingMaskIntoConstraints"를 NO로 설정하십시오. 같은 일, 불행히도. 이것은 매우 이상한 행동처럼 보입니다. –

+0

나는 동일한 문제가 있는데, 'translatesAutoresizingMaskIntoConstraints'를 시도했지만 작동하지 않는다. 도와주세요. – Sandy