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];
아이디어가 있으십니까? 내가 도대체 뭘 잘못하고있는 겁니까?
patchSubViewPadding 호출이 viewWillAppear에 없습니다. 또한 viewDidLoad에서 patchSubViewPadding을 시도했지만 아무 것도 변경되지 않았습니다. 다른 탭을 클릭 한 다음 첫 번째 탭을 클릭하여 서브 뷰가 장착 된 것을 확인해야하는 이유는 무엇입니까? 그것은 이상한 ... – thus
시도 [CommonUtilities patchSubViewPadding : self.detailView subView : self.customViewController.view 패딩 : 0]; ~ 아래 [self.detailView addSubview : self.customViewController.view]; viewDidLoad에서 – TheSD
나는 당신이 제안한 것을했지만 여전히 동일합니다. – thus