使用容器视图构建自定义拆分视图

时间:2014-03-13 15:05:05

标签: ios objective-c autolayout

我正在尝试使用嵌入UINavigationControllers的2个容器视图为iPad构建自定义拆分视图控制器... 我设法做了所有这些,但我遇到了设置约束的问题,所以一切都很好地重新调整。

这是我到目前为止所做的: enter image description here

我不能以详细视图(右侧容器)调整自身大小的方式调整主视图(左侧容器)的大小,以便在调整自身大小时消耗主视图留下的空间。所以我想这样结束:

enter image description here

在其他尝试中我尝试添加这些约束:

主容器:从顶部到父级,从左侧到父级,从底部到标签栏,高度,占位符宽度 detail容器:top to parent,left to master container,bottom to tabbar,right to parent,height,placeholder width

当我从代码调整主容器的大小时,细节控制器始终保持在原始位置。

我尝试了100个场景,但没有任何效果。

我正在做一些自动布局的根本错误但却无法弄清楚是什么......

这是调整大小的代码:

    -(void)ShowMaster:(BOOL)bShow animated:(BOOL)bAnimated
    {
        CGRect frame = masterViewContainer.frame;

        if(bShow){
            frame.size.width = 280;
        }
        else{
            frame.size.width = 50;
        }

        masterViewContainer.frame = frame;

    }

非常感谢任何形式的帮助。

修改 好的,我取得了一些进展,用这个替换了我的调整大小代码:

-(void)ShowMaster:(BOOL)bShow animated:(BOOL)bAnimated
{
    [UIView beginAnimations:@"" context:nil];
    if(bShow){
        [masterViewContainer addConstraint:[NSLayoutConstraint constraintWithItem:masterViewContainer
                                                              attribute:NSLayoutAttributeWidth
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:masterViewContainer
                                                              attribute:NSLayoutAttributeWidth
                                                             multiplier:0.5
                                                               constant:280]];


    }
    else{
        [masterViewContainer addConstraint:[NSLayoutConstraint constraintWithItem:masterViewContainer
                                                              attribute:NSLayoutAttributeWidth
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:masterViewContainer
                                                              attribute:NSLayoutAttributeWidth
                                                             multiplier:0.5
                                                               constant:50]];

    }
     [UIView commitAnimations];
}

现在详细调整大小,但是当我尝试扩展master时,没有任何反应......

2 个答案:

答案 0 :(得分:0)

试试这个:

-(void)viewDidLayoutSubviews {
   //your code

}

答案 1 :(得分:0)

我解决了。在我的viewDidLoad中:

- (void)viewDidLoad
{
    [super viewDidLoad];
    if(masterWidthConstraint == nil){
        masterWidthConstraint = [NSLayoutConstraint constraintWithItem:masterViewContainer
                                                             attribute:NSLayoutAttributeWidth
                                                             relatedBy:NSLayoutRelationEqual
                                                                toItem:masterViewContainer
                                                             attribute:NSLayoutAttributeWidth
                                                            multiplier:0.0
                                                              constant:280];


        [masterViewContainer addConstraint:masterWidthConstraint];
    }


}

在我的ShowMaster方法中,我只是更新了这个约束和动画,如下所示:

-(void)ShowMaster:(BOOL)bShow animated:(BOOL)bAnimated
{
    [UIView beginAnimations:@"" context:nil];

    if(bShow){
        masterWidthConstraint.constant = 280;
    }
    else{
        masterWidthConstraint.constant = 50;
    }

    [self.view setNeedsUpdateConstraints];
    [UIView animateWithDuration:0.9 animations:^{
        [self.view layoutIfNeeded];
    } completion:^(BOOL finished){}];
}

在我的IB中,我设置占位符约束形式主视图宽度......它的工作原理。只有我不能做的是将IBOutlet设为IB宽度约束,并且无法找出原因,但它的工作方式就好了......