ios - 如何在使用 iOS7 的 UINavigationBar 时以编程方式定位 UITableView?

标签 ios objective-c cocoa-touch uitableview ios7

我有一个非常常规的 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/

相关文章:

ios - 通过使用另一个支持层减少 UILabel 的内存

ios - 接收 web 套接字不能在 objective-c 中使用 socket.io 库

ios - 关键帧动画失败

cocoa-touch - @property 指向单例(或共享实例): strong or weak and why?

ios - 标题为 UIImage 的导航栏

CoreLocation 中的 iOS 崩溃

objective-c - 如何对从 UIButton 获取的常量变量执行操作?

iphone - 将手势识别器/ Action 方法附加到 View 会违反 Model View Controller 吗?

ios - Unity3d UI 事件在 iOS 设备上不起作用

ios - 如何获取 Amazon S3 存储桶中文件夹内的文件列表