iOS间距问题与半透明导航栏

时间:2013-09-02 13:48:53

标签: iphone ios objective-c autolayout

我目前正在使用一个带有3段UISegmentedControl的UIViewcontroller,当点击它时会切换显示的控制器。此视图的导航栏和标签栏是半透明的。

我像这样初始化视图:

- (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是IB定义的UIView,所有方面都有0个前导和尾随(基本上它填充了父视图)。

我按以下方式切换viewcontrollers:

-(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;
}

现在每当我使用不透明的导航栏和标签栏运行时,这都可以正常工作,但每当我尝试使用半透明导航栏和/或标签栏时,只有第一个视图调整大小/其插图被正确调整为不落后半透明导航栏和/或标签栏。当它们出现在屏幕上时,第二个和第三个视图仍将显示在它们后面。 将哪个viewcontroller设置为第一个viewcontroller并不重要,都会导致相同的行为。

可能导致此问题的原因是,如果不解决手动内容设置调整问题,有办法解决此问题。

2 个答案:

答案 0 :(得分:2)

我建议在您查看的属性检查器中启用“扩展边缘”选项。

答案 1 :(得分:0)

这是一个很好的stackoverflow文章,区分iOS 7及更高版本的各种布局设置:

Explaining difference between automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout in iOS7