UITableView在导航栏下滚动

时间:2008-11-26 17:39:01

标签: iphone objective-c cocoa-touch uitableview

我有一个表格视图设置,当它被闪烁时,它的部分会在状态栏的正下方冲洗,而不是冲向导航栏。我不确定这是否是正确的行为,但大多数应用程序在滑入视图时都会在导航栏下方正确刷新节标题。

纠正这个问题的正确方法是什么,而不是随意缩小tableView的尺寸?

*编辑*

与我在Broken cell with an odd strikethrough?中创建的主题相关。当我将导航栏设置为半透明黑色时,会出现此问题以及“单元格透视”问题。当它是黑色不透明或正常时,不存在这样的问题。我不确定这是否是我的代码中的其他内容或SDK的问题。

4 个答案:

答案 0 :(得分:3)

听起来你要么没有在IB中正确设置边界,要么你的弹簧和支柱不正确。这是UIViewController或子视图的顶级吗?你在使用UINavigationController吗?如果您在IB中测试界面,它看起来没问题吗?

答案 1 :(得分:1)

我遇到了类似的问题,并通过设置此

自动修复
self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;

答案 2 :(得分:0)

正如我在另一篇文章中指出的那样,我怀疑UINavigationController下的视图层次结构已经中断。

UINavigationController的内容视图(包含导航栏和UITableView)中的layoutSubviews应该调整UITableView的大小,使其不与导航栏重叠。在你的情况下,我猜测UITableView后来调整自身大小或者layoutSubviews由于某种原因不知道UITableView,UITableView正在导航栏下方传递,导致你看到的对齐问题。

答案 3 :(得分:0)

我在iOS 5.1上使用以下代码遇到了同样的问题:

创建导航控制器&添加表格视图

UINavigationController *navigationController = [[UINavigationController alloc] init];
[navigationController setModalPresentationStyle:UIModalPresentationFormSheet];
[navigationController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[navigationController.navigationBar setBarStyle:UIBarStyleBlack];
[navigationController.navigationBar setTranslucent:TRUE];
[navigationController setNavigationBarHidden:NO animated:NO];
[self presentModalViewController:navigationController animated:YES];

MyTableViewController *aTableViewController = [[[MyTableViewController alloc] initWithStyle:UITableViewStylePlain] autorelease];
aTableViewController.navigationItem.rightBarButtonItem = buttonItem;
[navigationController pushViewController:aboutTableViewController animated:YES];

将表标题视图添加到表格

ATableHeaderView aTableHeaderView = [[[ATableHeaderView alloc] initWithFrame:aboutTableView.frame] autorelease]; 
[aTableHeaderView setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleTopMargin];
[aTableHeaderView sizeToFit];
[aTableView setTableHeaderView:aTableHeaderView];

在表格标题视图中,我添加了一些标签

UILabel *aLabel = [[[UILabel alloc] initWithFrame:CGRectMake(x,y, width, height)] autorelease];
[aLabel setText:aString];
[aLabel setAutoresizesSubviews:YES];
[aLabel setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];

我最终得到了导航栏下的表格标题内容。将导航栏更改为纯黑色固定它。但这不是我想要的。经过一些试验和错误后,我删除了该行:

[aLabel setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];

从标题中的UILabel设置开始,问题就解决了。我有一个半透明的标题,表的内容定位正确。