UITableView在导航栏下滚动
Posted
技术标签:
【中文标题】UITableView在导航栏下滚动【英文标题】:UITableView scrolling under the navigation bar 【发布时间】:2008-11-26 17:39:00 【问题描述】:我有一个表格视图设置,当前,当它闪烁时,它的部分与状态栏正下方齐平,而不是与导航栏齐平。我不确定这是否是正确的行为,但大多数应用程序在滑入视图时都会在导航栏下方正确刷新部分标题。
纠正这个问题而不是随意缩小tableView的正确方法是什么?
* 编辑 *
与我在Broken cell with an odd strikethrough? 中创建的线程有关。当我将导航栏设置为半透明黑色时,会出现此问题以及“单元格删除线”问题。当它是黑色不透明或正常时,不存在这样的问题。我不确定这是因为我的代码中的其他内容还是 SDK 的问题。
【问题讨论】:
【参考方案1】:听起来您要么没有在 IB 中正确设置边界,要么您的弹簧和支柱不正确。这是 UIViewController 的顶层,还是子视图?你在使用 UINavigationController 吗?如果在 IB 中测试接口,看起来还可以吗?
【讨论】:
嗨,Ben,我的 NIB 如下所示:dl-client.getdropbox.com/u/57676/controller.png。我确实有一个 UINavigationController,它位于 MainWindow.NIB 中,其根控制器设置在那里。我所做的只是将一个 tableView 添加到我的视图中,一个 UINavigationItem,并希望它能够工作。 里面有什么专有的吗?如果你愿意,你可以把代码发给我(ben atstandalone dot com),我会看一下; nib 文件的图像并没有多大帮助,唉。 最好在此处发布代码,或者如果太长,请在其他网站上发布并从此处参考。这样我们都可以做出贡献。【参考方案2】:我遇到了类似的问题,通过设置它会自动修复
self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
【讨论】:
【参考方案3】:正如我在另一篇文章中所指出的,我怀疑 UINavigationController 下的视图层次结构已被破坏。
UINavigationController 的内容视图(包含导航栏和您的 UITableView)中的 layoutSubviews 应该调整 UITableView 的大小,使其不与导航栏重叠。在您的情况下,我猜测 UITableView 之后会自行调整大小,或者 layoutSubviews 由于某种原因不知道 UITableView 并且 UITableView 在导航栏下方传递,从而导致您看到的对齐问题。
【讨论】:
【参考方案4】:我在 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 设置,问题已解决。我有一个半透明的表头,并且表格的内容定位正确。
【讨论】:
以上是关于UITableView在导航栏下滚动的主要内容,如果未能解决你的问题,请参考以下文章
UITableView indexPathsForVisibleRows 返回错误的行
旋转后 UINavigationController 中的 UITableView 在导航栏下
UITableView 和分段控制器在 IOS 11 导航栏下移动