调整iPad中的第二个子视图控制器视图的大小

时间:2014-01-14 02:47:59

标签: ios objective-c ipad cordova uiviewcontroller

我正在做一个PhoneGap iPad应用程序。在这里我添加了一个HybridPage(其中包含webView)作为子视图控制器,然后在该屏幕之后我添加了一个新的Controller(也从ParentViewController中删除了hybridPage),其中包含Native Controller和同样的HybridPage Controller实例(添加了两个)作为孩子的控制者。)

此处我的本机控制器大小为(320,704),混合控制器大小为(702,704)。

现在问题是我无法从右侧与混合控制器的半帧交互(从视图的contentoffset的末尾开始宽度为320)。

我已经给出了两个viewControllers框架,即使我无法与一些混合控制器的矩形交互。

  • (无效)setDashboardRootViewController:(UIViewController中*)RootViewController的

{

    if ([[self childViewControllers] containsObject:[MCIPadRootViewController getIPadRootViewController].mcWebViewController])

{

    [[MCIPadRootViewController getIPadRootViewController] removeMCWebViewController];

}

[self addChildViewController:self.dashboardViewController];

[self.dashboardContainerView addSubview:self.dashboardViewController.view];

if ([rootViewController isKindOfClass:[MCLoginFlowWebViewController class]])

{

    [self addChildViewController:[MCIPadRootViewController getIPadRootViewController].mcWebViewController];

    [MCIPadRootViewController getIPadRootViewController].mcWebViewController.view.frame = CGRectMake(0, 0, self.mcWebViewContainerView.frame.size.width, self.mcWebViewContainerView.frame.size.height);

    [self.mcWebViewContainerView addSubview:[MCIPadRootViewController getIPadRootViewController].mcWebViewController.view];

}

}

我在哪里可以设置Child ViewController的Frame。在这里,我设置了viewcontroller的视图框架,但它没有效果。 任何人都可以帮我解决这个问题。

为清晰起见,请找到屏幕截图。

2 个答案:

答案 0 :(得分:0)

您通常会在2个位置设置子视图控制器视图的框架。

  1. 在您将其添加到父级之前。在父视图控制器中搜索对addChildViewController的调用。在该调用之前设置框架(可能有2次调用addChildViewController:)。
  2. 如果尺寸因旋转而改变,则需要在父视图控制器的viewWillLayoutSubviews:方法中重置子视图控制器视图的框架。
  3. 以下是自定义拆分视图控制器的示例。

    注意设置#1的2个地方。

    - (void)setMasterViewController:(UIViewController *)controller
    {
        if (!_masterViewController) {
            // Add the new controller
            controller.view.frame = self.masterView.bounds;
            [self addChildViewController:controller];
            [self.masterView addSubview:controller.view];
            [controller didMoveToParentViewController:self];
            _masterViewController = controller;
        } 
        else if (_masterViewController != controller) {
            // Transition from the old to new controller
            controller.view.frame = self.masterView.bounds;
            [_masterViewController willMoveToParentViewController:nil];
            [self addChildViewController:controller];
            self.view.userInteractionEnabled = NO;
            [self transitionFromViewController:_masterViewController 
                              toViewController:controller 
                                      duration:0.0
                                       options:UIViewAnimationOptionTransitionNone
                                    animations:^{} 
                                    completion:^(BOOL finished) {
                                        self.view.userInteractionEnabled = YES;
                                        [_masterViewController removeFromParentViewController];
                                        [controller didMoveToParentViewController:self];
                                        _masterViewController = controller;
                                    }
             ];
    
        } 
    }
    

    这里是设置#2的地方:

    - (void)viewWillLayoutSubviews
    {
        CGRect contentFrame = self.view.bounds;
        float contentWidth = contentFrame.size.width;
    
        CGRect masterRect = contentFrame;
        CGRect detailRect = contentFrame;
        CGRect dividerRect = contentFrame;
    
        if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) {
            masterRect.size.width = DEFAULT_SPLIT_POSITION;
            detailRect.origin.x = DEFAULT_SPLIT_POSITION + DEFAULT_DIVIDER_WIDTH;
            detailRect.size.width = contentWidth - (DEFAULT_SPLIT_POSITION + DEFAULT_DIVIDER_WIDTH);
            dividerRect.size.width = DEFAULT_DIVIDER_WIDTH;
            dividerRect.origin.x = DEFAULT_SPLIT_POSITION;
        }
        else {
            masterRect.size.width = contentWidth;
            detailRect.origin.x = contentWidth;
            dividerRect.origin.x = contentWidth;
        }
    
        self.masterView.frame = masterRect;
        self.detailView.frame = detailRect;
        self.dividerView.frame = dividerRect;
    }
    

    <强> [编辑]

    因此,您可以使用以下内容更新代码,以便调用所有视图容器包含方法,并以正确的顺序调用。

    [MCIPadRootViewController getIPadRootViewController].mcWebViewController.view.frame = CGRectMake(0, 0, self.mcWebViewContainerView.frame.size.width, self.mcWebViewContainerView.frame.size.height);
    [self addChildViewController:[MCIPadRootViewController getIPadRootViewController].mcWebViewController];
    [self.mcWebViewContainerView addSubview:[MCIPadRootViewController getIPadRootViewController].mcWebViewController.view];
    [controller didMoveToParentViewController:self];
    

    另外,我认为您的CGRectMake不正确。您通常不会引用视图的框架,您将引用父视图的边界。尝试将其设置为这样,看看它是否有帮助。这将填充父视图,但您也可以调整它。

    [MCIPadRootViewController getIPadRootViewController].mcWebViewController.view.frame = self.mcWebViewContainerView.bounds;
    

答案 1 :(得分:0)

我提出了自己的解决方案。

问题是我的应用程序在横向模式下打开所以我将视图框架转换为边界。

[[[self recurringListController] view] setFrame:[[self view] bounds]];

使用上述方法我克服了我的问题。