如何避免在自定义容器(stackedViewcontroller)内的 UiNavigationcontroller 内调整 UITableView 的大小

Posted

技术标签:

【中文标题】如何避免在自定义容器(stackedViewcontroller)内的 UiNavigationcontroller 内调整 UITableView 的大小【英文标题】:How to avoid resizing of UITableView inside UiNavigationcontroller which is inside a custom container(stackedViewcontroller) 【发布时间】:2012-11-10 00:37:19 【问题描述】:
MoveToNewLocViewContoller *move2NewLocVC = [[MoveToNewLocViewContoller alloc] initWithLocItemArray:moveToNewLocArray andSyLocIDArray:syLocIdArray];
        [move2NewLocVC setTitle:cell.textLabel.text];


        UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:move2NewLocVC];
        navController.view.width = PSIsIpad() ? self.view.width : 100;
        [navController.navigationBar setTintColor:BLUE];


        if (navController) 

            [XAppDelegate.menuInterfaceViewController.stackViewController pushViewController:navController fromViewController:nil animated:YES];
            [navController release];
            //[viewController release];
            [moveToNewLocArray release];
            [move2NewLocVC release];
        

现在我希望上面的导航控制器在我旋转 ipad 时不会调整大小。我试过了 navController.view.autoresizesSubviews = NO;

这可行,但有一个问题是它不允许我的 UITableView(MoveToNewLocViewController) 滚动到底部。避免调整大小的主要目的是避免重绘我巨大的自定义 UITableViewcell 以适应方向。我知道我必须在定向后调整 UiTableview 的大小,但问题是在哪里。我试过了

 -(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration 

-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 

它似乎不起作用。这是因为我将它插入到堆叠容器视图中吗?

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我通过在 UIView 中包含 UITableView 来解决这个问题,然后将其作为 UIViewController 添加到 UiNavigationController。当设备旋转时,我在 didRotateFrominterfaceOrientation 方法中调整视图大小

-(void) didRotateFromInterfaceOrientation:  (UIInterfaceOrientation)fromInterfaceOrientation
  PSStackedViewController *stackController = XAppDelegate.menuInterfaceViewController.stackViewController;
if( [[UIDevice currentDevice] orientation] == UIInterfaceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIInterfaceOrientationPortraitUpsideDown)
    [stackController setLargeLeftInset:50 animated:YES];
    self.navigationController.navigationBar.frame = CGRectMake(self.navigationController.navigationBar.frame.origin.x, self.navigationController.navigationBar.frame.origin.y, self.view.frame.size.width, self.navigationController.navigationBar.frame.size.height);
    self.move2NewLocTableView.height = self.view.height;

if( [[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeLeft || [[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeRight) 
    //self.navigationController.view.frame = self.tableView.frame;
    [stackController setLargeLeftInset:320 animated:YES];
    self.move2NewLocTableView.height = 700;
 

【讨论】:

以上是关于如何避免在自定义容器(stackedViewcontroller)内的 UiNavigationcontroller 内调整 UITableView 的大小的主要内容,如果未能解决你的问题,请参考以下文章

是否可以避免在自定义@Query 上进行类型转换?

在自定义容器控制器中拆分视图控制器?

谁负责在自定义 UIViewController 容器中调用 viewWillLayoutSubviews()/viewDidLayoutSubviews()?

在自定义容器视图中旋转时 AutoLayout 不会调整视图大小?

使用后台容器在自定义列表视图上加载动态数据

如何在自定义模板中使用 Django 的管理员布尔图标?