iphone - 为什么在 dismissViewControllerAnimated 之后父框架没有保持相同的大小?

标签 iphone objective-c ios presentmodalviewcontroller

我已经从 apple 下载了 PageControl 示例代码。这是一个带有 UIPageControl 的项目。我对其进行了更改,以便 UIScrollView 具有不同的 View 。对于我想添加的每个 View ,我创建了一个 UINavigationController,其中 rootViewController 作为 UIViewControllerUITableViewController 的子类>。然后,我将 navigationController 的 View 添加到 UIScrollView 中。

假设我现在处于第一 View 。我想展示一个模态视图 Controller 。当我关闭它时,父 View Controller (在我的示例中为 HomeViewController)处于全屏状态,而不是之前的大小,这将在底部显示页面控件。我能让它正常工作的唯一方法是在关闭后调整框架的大小,但这是一种糟糕的用户体验,因为它是在显示父 View Controller 之后调用的。关于如何避免在关闭模态视图 Controller 时调整 HomeViewController 框架大小的任何想法?

-(void)dismissMVC:(id)sender {
    CGRect frame = self.view.frame;
    [self dismissViewControllerAnimated:YES completion:^{
        self.view.frame = frame;
    }];    
}


- (void)loadScrollViewWithPage:(int)page
{
if (page < 0)
    return;
if (page >= kNumberOfPages)
    return;

// replace the placeholder if necessary
switch (page) {
    case Home:
    {
        HomeViewController *controller = [viewControllers objectAtIndex:page];

        if ((NSNull *)controller == [NSNull null])
        {
            controller = [[HomeViewController alloc] initWithPageNumber:page];
            [viewControllers replaceObjectAtIndex:page withObject:controller];
            [controller release];
        }

        // add the controller's view to the scroll view
        if (controller.view.superview == nil)
        {
            UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
            navController.navigationBar.barStyle = UIBarStyleBlack;
            [navController setNavigationBarHidden:YES];
            CGRect frame = scrollView.frame;
            frame.origin.x = frame.size.width * page;
            frame.origin.y = 20;
            frame.size.height = frame.size.height - 20;
            navController.view.frame = frame;
            controller.view.frame = frame;
            [controller setNavController:navController];

            [scrollView addSubview:navController.view];
            [navController release];
        }
        break;
    }
}
}

最佳答案

当将 veiwControllers 插入导航堆栈时,由于内存不足,可以释放 View 不是当前显示的 View 的 viewControllers。

如果您在 appdelegate 或您最初推送的 viewcontroller 实例中维护一个 HomeViewController 实例,您可以调用 HomeViewController.view 以强制加载它的 View ,然后在调用 dismissViewControllerAnimated 之前为其提供所需的帧。

关于iphone - 为什么在 dismissViewControllerAnimated 之后父框架没有保持相同的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11314258/

相关文章:

iphone - 我可以动态修改设置包中的 Root.plist 吗?

ios - CFStreamCreatePairWithSocketToHost iOS 中的内存泄漏

ios - Objective-C:NSArray与NSMutableArray的格式

ios - 查看重叠通知

c++ - 在cocos2d-x项目中使用admob和objective-c时出现的问题

ios - iOS LAPolicyDeviceOwnerAuthentication“取消”按钮

ios - 具有动态 subview swift 的 UITableViewCell 高度

iphone - UILocalNotification - 即使应用程序通过主屏幕启动也响应通知

ios - 为什么 UILabel TextColor 在 Playground 中是动画的,而不是在设备上?

iphone - Javascript Youtube API : buffering for ever - UIWebView iOS