2014-10-19 2 views
0

MyListViewController라는 문제가있는 UIView가 있습니다. 그것은 내 응용 프로그램의 첫 번째 탭에 있습니다.하위 뷰를 부모에게 맞추고 있습니까?

viewDidLoad 섹션에 하위 뷰를 추가합니다 (하위 뷰에 정의 된 일부 제약 조건이 있음). 응용 프로그램을 실행할 때 하위보기가 루트보기에 잘 맞지 않습니다.. 그러나 다른 탭으로 이동 한 다음 첫 번째 탭을 다시 클릭하면 응용 프로그램이 제대로 하위보기에 맞습니다.

또한 [self.detailView setTranslatesAutoresizingMaskIntoConstraints : YES]를 사용할 수 없습니다. 제약 조건 충돌이 발생하기 때문입니다.

어쨌든 detailView로 정의 된 rootView에 subView를 맞추기 위해 patchSubViewPadding이라는 내 사용자 정의 메서드를 작성했습니다. 위에서 언급했듯이 다른 탭 중 하나를 탐색 한 다음 첫 번째 탭으로 이동하면 응용 프로그램에 서브 뷰가 제대로 표시됩니다 ().

+(CGRect)patchSubViewPadding:(UIView *)superView subView:(UIView *)subView padding:(float)padding 
{ 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     if (padding == 0) 
      padding = -4.0f; 

     CGRect frame = superView.bounds; 

     frame.origin.y = 0; 
     frame.size.width = frame.size.width - padding; 
     subView.frame = frame; 

     return subView.frame; 
    } 

    return subView.frame; 
} 

내가있는 viewDidLoad 또는 viewWillLayoutSubviews에 하나 다음과 같은 속성을 시도했지만 작동하지 않았다 :

@interface MyListViewController() 

@property (strong, nonatomic) CustomViewController *customViewController; 

@end 

@implementation MyListViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    CustomViewController *viewController = (CustomViewController *)[storyboard instantiateViewControllerWithIdentifier:@"customView"]; 
    self.customViewController = viewController; 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
     [self.detailView addSubview:self.customViewController.view]; 
} 

-(void)viewDidAppear:(BOOL)animated 
{ 
    [CommonUtilities patchSubViewPadding:self.detailView subView:self.customViewController.view padding:0]; 
} 

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    [CommonUtilities patchSubViewPadding:self.detailView subView:self.customViewController.view padding:0]; 
} 

@end 

는 그리고 이것은 내 사용자 지정 방법입니다.

[self.detailView setNeedsLayout]; 
[self.detailView setNeedsUpdateConstraints]; 

아이디어가 있으십니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

patchSubViewPadding에 대한 메서드 호출을 viewDidAppear 밖으로 이동하고 viewDidLoad의 맨 아래로 이동하십시오.

+0

patchSubViewPadding 호출이 viewWillAppear에 없습니다. 또한 viewDidLoad에서 patchSubViewPadding을 시도했지만 아무 것도 변경되지 않았습니다. 다른 탭을 클릭 한 다음 첫 번째 탭을 클릭하여 서브 뷰가 장착 된 것을 확인해야하는 이유는 무엇입니까? 그것은 이상한 ... – thus

+0

시도 [CommonUtilities patchSubViewPadding : self.detailView subView : self.customViewController.view 패딩 : 0]; ~ 아래 [self.detailView addSubview : self.customViewController.view]; viewDidLoad에서 – TheSD

+0

나는 당신이 제안한 것을했지만 여전히 동일합니다. – thus

관련 문제