我目前有一个带有 3 段的 UIViewcontroller UISegmentedControl
,当单击它时会显示切换视图控制器。这个视图的导航栏和标签栏是半透明的。
我像这样初始化视图:
- (void)viewDidLoad {
[super viewDidLoad];
[self setAutomaticallyAdjustsScrollViewInsets:YES];
self.segControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"View 1",@"View 2",@"View 3",nil]];
[self.segControl setTintColor:[[ConstantsSingleton sharedConstants] default_bg_Color]];
[self.segControl setSegmentedControlStyle:UISegmentedControlStyleBar];
[self.segControl addTarget:self action:@selector(segmentChanged:) forControlEvents:UIControlEventValueChanged];
[self.segControl setSelectedSegmentIndex:0];
self.navigationItem.titleView = self.segControl;
//Setting up the first viewcontroller
UIViewController *vc = [self viewControllerForSegmentIndex:self.segControl.selectedSegmentIndex];
[self addChildViewController:vc];
vc.view.frame = self.contentView.bounds;
[self.contentView addSubview:vc.view];
self.currentViewController = vc;
}
这contentView
是一个定义UIView
为 0 前导和尾随的 IB(所以基本上它填充了父视图)。
我通过以下方式切换视图控制器:
-(void)segmentChanged:(UISegmentedControl *)sender {
UIViewController *vc = [self viewControllerForSegmentIndex:sender.selectedSegmentIndex];
[self addChildViewController:vc];
[self transitionFromViewController:self.currentViewController toViewController:vc duration:0.5 options:UIViewAnimationOptionTransitionFlipFromRight animations:^{
vc.view.frame = self.contentView.bounds;
[self.currentViewController.view removeFromSuperview];
[self.contentView addSubview:vc.view];
} completion:^(BOOL finished) {
[vc didMoveToParentViewController:self];
[self.currentViewController removeFromParentViewController];
self.currentViewController = vc;
}];
self.navigationItem.title = vc.title;
}
现在,每当我使用不透明的导航栏和标签栏运行它时,它都可以正常工作,但是每当我尝试使用半透明的导航栏和/或标签栏时,只有第一个视图被调整大小/它的插图被正确调整为不在半透明导航的后面栏和/或标签栏。当它们出现在屏幕上时,第二个和第三个视图仍然会出现在它们的后面。哪个视图控制器设置为第一个视图控制器并不重要,都会导致相同的行为。
可能是什么导致了这个问题,有没有办法解决这个问题而无需手动调整内容。