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

Ios 在iPad中调整第二个子视图控制器视图的大小,ios,objective-c,ipad,cordova,uiviewcontroller,Ios,Objective C,Ipad,Cordova,Uiviewcontroller,我正在做一个PhoneGap iPad应用程序。在本例中,我添加了一个HybridPage,其中包含webView作为子视图控制器,然后在该屏幕之后,我添加了一个新控制器,还从ParentViewController中删除了HybridPage,该控制器包含本机控制器,HybridPage控制器的同一实例添加了两个控制器作为子视图控制器 这里,我的本机控制器大小为320704,混合控制器大小为702704 现在的问题是,我无法从右侧与混合控制器的半帧交互,从视图的contentoffset末端开

我正在做一个PhoneGap iPad应用程序。在本例中,我添加了一个HybridPage,其中包含webView作为子视图控制器,然后在该屏幕之后,我添加了一个新控制器,还从ParentViewController中删除了HybridPage,该控制器包含本机控制器,HybridPage控制器的同一实例添加了两个控制器作为子视图控制器

这里,我的本机控制器大小为320704,混合控制器大小为702704

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

我已经给出了两个ViewController框架,尽管我无法与混合控制器的某个矩形进行交互

voidsetDashboardRootViewController:UIViewController*rootViewController {

}

在哪里可以设置子ViewController的帧。在这里,我设置了viewcontroller的视图框,但它不起作用。 谁能帮我摆脱这个问题


为了清晰起见,请查看屏幕截图。

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

就在您将其添加到父级之前。在父视图控制器中搜索对addChildViewController:的调用。在该调用之前设置帧可能有2个对addChildViewController的调用:。 如果大小因旋转而更改,则需要在父视图控制器的viewWillLayoutSubviews:方法中重置子视图控制器视图的框架。 下面是一个来自自定义拆分视图控制器的示例

请注意设置了1的两个位置

- (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];
而且我认为你的品牌不对。通常不会引用视图的框架,而是引用父视图的边界。试着这样设置,看看是否有帮助。这将使其填充父视图,但您也可以调整它

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

我想出了自己的解决办法

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

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

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

谢谢你的帮助,杰西,但我的问题仍然没有解决。另外,我刚刚添加了一个屏幕截图,让您了解我的问题。调试时,我只发现方向问题,即DetailView混合框架为Landscape1024768,MasterView为纵向7681024。添加子视图控制器时,需要执行更多步骤。这可能是你的问题。我看到您只调用addChildViewController:。光靠这一点是不够的。阅读UIViewController文档中的“实现容器视图控制器”部分。对于需要调用的其他方法,您可以参考我的代码示例1。首先,我的应用程序有一个混合页面登录,其全帧大小为1024768,然后在该混合页面之后,我在仪表板视图中使用相同的混合页面实例,该实例同时具有本机页面和混合页面。而且我的应用程序也不支持人像。感谢您的宝贵建议Jesset由于此问题,我的视图状态栏处于横向模式,但ViewDidDisplay中的图幅返回纵向图幅7681024,因此提出了此问题。
[[[self recurringListController] view] setFrame:[[self view] bounds]];