У меня есть проблемный UIView, который называется MyListViewController. Это на первой вкладке в моем приложении.
Я добавляю подпредставление в раздел viewDidLoad (в подпредставлении определены некоторые ограничения). Когда я запускаю приложение, подпредставление не соответствует его корневому представлению. Однако, если я перейду на другую вкладку, а затем повторно щелкну на первой вкладке, приложение правильно впишется в подпредставление.
Также я не могу использовать [self.detailView setTranslatesAutoresizingMaskIntoConstraints:YES]; потому что это вызывает кучу конфликтов ограничений.
Во всяком случае, я написал свой собственный метод patchSubViewPadding, чтобы подогнать subView к его rootView, который определяется как detailView. Как я уже говорил выше, если я перейду к одной из других вкладок, а затем перейду к первой вкладке, приложение правильно отобразит подпредставление.
@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
И это мой собственный метод:
+(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, но это не сработало.
[self.detailView setNeedsLayout];
[self.detailView setNeedsUpdateConstraints];
Любые идеи? Что я делаю неправильно?