2011-06-12 85 views
0

我正在构建我的第一个基本选项卡,具有其中一个视图的应用程序作为将显示视图控制器的导航控制器。标题栏阻挡的TableView

我运行到一个问题,在该点处,用户选择从第一tableview中的类别作为屏幕截图所示:http://www.cl.ly/7YOF

当tableviewcontroller的另一个实例被加载并被推到navigationcontroller的堆叠 http://www.cl.ly/7ZRz

表格视图选择逻辑是以下:,该表由标题栏阻碍

 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    KHCategory *selectedItem = [categoryArray objectAtIndex:indexPath.row]; 
    if (selectedItem.categories.count > 0) { 
     KHCategoryTableViewController *nextCategoryController = [[KHCategoryTableViewController alloc] init]; 
     nextCategoryController.categoryArray = [[NSArray alloc] initWithArray:selectedItem.categories]; 
     nextCategoryController.title = selectedItem.labelValue; 

     [self.navigationController pushViewController:nextCategoryController animated:YES]; 
     [nextCategoryController release]; 
    } else { 
     NSLog(@"show detail view"); 
    } 
} 

编辑: 我应该清楚,KHCategoryTableViewController的一个实例是我的NavigationController的根,NavController连线到TabController的第一个选项卡。

回答

0

,当我对着内置的iOS 4.3和iOS的不5.

0

检查您的KHCategoryTableViewController视图的autoResizingMask。在iPhone开发中心

UINavigationController的概述说:

注:由于篇幅 可用于自定义视图的量可以改变 (取决于其他 导航视图大小),自定义视图的 autoresizingMask属性应该是 设置为具有灵活宽度和 高度。在显示您的视图之前, 导航控制器 会自动定位并调整它的大小以使其适合可用空间 。

+0

我添加[self.view setAutoresizingMask这个问题成为解决: UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];到KHCategoryTableViewController的viewDidLoad方法,但没有帮助。我是否以错误的方式去做? – 2011-06-12 22:20:57

+0

我在手动和之后添加了蒙版之前输出了蒙版的值,并且两者的结果都是18.因此,UITableViewController视图蒙版的默认值是18.感谢您的建议。 – 2011-06-13 00:29:03

4

两个有趣的事情:它测量20个像素向下(状态栏的大小)和您的行“nextCategoryController.title = ...”似乎并没有做任何事情。所以...

1)我假设你还没有使用setStatusBarHidden

2)看起来像navController的东西不工作。你能给出创建tabBar和NavController的appDelegate代码吗?

3)添加此代码,并尝试从您的子类别ViewDidLoad方法调用[self dumpWindow: @"VDL"]方法。每当检查我的视图结构是否正确时,我发现它非常宝贵。

- (void) dumpWindowFrom:(NSString *) fromText { 
    [self dumpViews: nil from:fromText]; 
} 

void dumpViewsRecursive(UIView* view, NSString *text, NSString *indent) { 
    Class cl = [view class]; 
    NSString *classDescription = [cl description]; 

    if ([text compare:@""] == NSOrderedSame) 
    NSLog(@"%d: %@ %@ %@", (int)view, classDescription, NSStringFromCGRect(view.frame), view.hidden ? @"Inv" : @"Vis"); 
else 
    NSLog(@"%d: %@ %@ %@ %@", (int)view, text, classDescription, NSStringFromCGRect(view.frame), view.hidden ? @"Inv" : @"Vis"); 

    for (NSUInteger i = 0; i < [view.subviews count]; i++) 
    { 
     UIView *subView = [view.subviews objectAtIndex:i]; 
     NSString *newIndent = [[NSString alloc] initWithFormat:@" %@", indent]; 
     NSString *msg = [[NSString alloc] initWithFormat:@"%@%d:", newIndent, i]; 
     dumpViewsRecursive (subView, msg, newIndent); 
     [msg release]; 
     [newIndent release]; 
    } 
}  

- (void) dumpViews: (UIView *) view { 
    dumpViewsRecursive (((!view) ? [[UIApplication sharedApplication] keyWindow] : view), @"" ,@""); 
} 

- (void) dumpViews: (UIView *) view from:(NSString *) fromText{ 
    dumpViewsRecursive ((!view) ? [[UIApplication sharedApplication] keyWindow] : view, fromText, @""); 
} 

4)你可以永远只是欺骗并添加:

CGRect frame = [nextCategoryController.view frame]; 
frame.origin.y = frame.origin.y+20.0; 
[nextCategoryController.view setFrame:frame]; 
+0

感谢您提供详细和深入的答案。几天前我也尝试过#4。然而,我昨晚得出了一个结论,我认为我刚刚证实这是问题 - 我很愚蠢地针对iOS5 SDK进行构建。我今晚要做更多的测试,看看是否是这种情况。会让你知道。 – 2011-06-15 14:37:27

+0

尽管你的答案并不是我的答案,但我会为你提供良好的调试技巧和周到的答案,以奖励你(明显在7小时内)。 – 2011-06-15 15:45:18

+0

谢谢。我很惊讶5.0破坏了一些简单的东西。 – mackworth 2011-06-15 15:55:01