我有一个非常常规的 UIViewController
,它是 UINavigationController
层次结构的一部分,这自然使 View 在顶部。众所周知,iOS7的导航栏与之前的版本有很大不同。
如果我将 UITableView
拖到 Storyboard 中的 View 中,那么 TableView 的“框架”将覆盖整个 View (即 [tableView setFrame:self.view.frame] ;
)。甚至在 NavigationBar
后面。
这使得如果我滚动,内容将通过栏隐约可见。
与大多数人相反,我实际上喜欢这个。
在我当前的 View Controller 中,我想以编程方式创建 UITableView
并将其作为 subview 放置在这里。但是,我无法通过这种方式达到相同的效果。
我试过了
UITableView *table = [[UITableView alloc] initWithFrame:self.view.frame];
[self.view addSubview: table];
这使得“顶部滚动点”留在导航栏后面。想象一下 tableView 中的单个单元格,通过顶部栏隐约可见。如果我向下滚动,它会在它后面弹出。这是默认的“最高位置”。
我也试过
CGRect frame = CGRectMake(0, 'nav.y+nav.height', self...width, self...height-y);
UITableView *table = [[UITableView alloc] initWithFrame:frame];
[self.view addSubview: table];
简单地将 TableView 放在 UINavigationBar
下方的矩形中,但这样我就不会在栏后面获得滚动透明效果。
我还尝试了第一个示例:
[tableView setContentOffset:CGPointMake(0, 'below navbar')];
这使它准确地停留在我希望它停留的位置,但只要我触摸它(滚动并释放),它就会向上滚动回到导航栏后面,并停留在那里。
实现这种效果的程序化解决方案是什么?每次向上滚动太远时是否都必须设置偏移量,还是有更简单的解决方案?除了这种 iOS7 风格,我想他们会添加类似 [tableView setVisibleFrame:]
之类的东西..?
最佳答案
像往常一样在 Storyboard 中添加表格,但请确保您已将其连接到 socket (我们现在将其称为 _tableView
)。
然后在您的 View Controller 的 -viewDidLoad
中将顶部插入设置为状态栏和导航栏:
`self.tableView.contentInset = UIEdgeInsetsMake( (self.navigationController.navigationBar.frame.origin.y + self.navigationController.navigationBar.frame.size.height), 0, 0, 0);'
这将确保所有单元格都可见,但也会用白色填充导航栏后面的区域,这样导航栏就不会变成灰色。
关于ios - 如何在使用 iOS7 的 UINavigationBar 时以编程方式定位 UITableView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20575805/