Ios 在iPad中调整第二个子视图控制器视图的大小
我正在做一个PhoneGap iPad应用程序。在本例中,我添加了一个HybridPage,其中包含webView作为子视图控制器,然后在该屏幕之后,我添加了一个新控制器,还从ParentViewController中删除了HybridPage,该控制器包含本机控制器,HybridPage控制器的同一实例添加了两个控制器作为子视图控制器 这里,我的本机控制器大小为320704,混合控制器大小为702704 现在的问题是,我无法从右侧与混合控制器的半帧交互,从视图的contentoffset末端开始,宽度为320 我已经给出了两个ViewController框架,尽管我无法与混合控制器的某个矩形进行交互 voidsetDashboardRootViewController:UIViewController*rootViewController { } 在哪里可以设置子ViewController的帧。在这里,我设置了viewcontroller的视图框,但它不起作用。 谁能帮我摆脱这个问题Ios 在iPad中调整第二个子视图控制器视图的大小,ios,objective-c,ipad,cordova,uiviewcontroller,Ios,Objective C,Ipad,Cordova,Uiviewcontroller,我正在做一个PhoneGap iPad应用程序。在本例中,我添加了一个HybridPage,其中包含webView作为子视图控制器,然后在该屏幕之后,我添加了一个新控制器,还从ParentViewController中删除了HybridPage,该控制器包含本机控制器,HybridPage控制器的同一实例添加了两个控制器作为子视图控制器 这里,我的本机控制器大小为320704,混合控制器大小为702704 现在的问题是,我无法从右侧与混合控制器的半帧交互,从视图的contentoffset末端开
为了清晰起见,请查看屏幕截图。您通常会在两个位置设置子视图控制器视图的框架 就在您将其添加到父级之前。在父视图控制器中搜索对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]];