为什么我的View Controller有时会识别出导航栏的存在?

时间:2015-02-24 17:06:07

标签: ios objective-c iphone uitableview

我已经找到了答案,但我似乎无法找到答案,所以我在这里提出问题。如果这是重复,请指出正确的页面。

我有一个View Controller,在viewDidLoad中我创建了一个UITableView并将其设置为

CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)

如果UITableView中有内容。如果其中没有任何内容,我将UITableView的框架设置为

CGRectMake(0, 135, self.view.frame.size.width, self.view.frame.size.height)

这样我就可以在它上面显示一条消息。

在这个ViewController中,我有一个添加按钮,按下后,我创建一个新视图,您可以在其中输入或修改现有信息,然后按保存或删除按钮,从超视图中删除视图并重置UITableView的框架回到

CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)  

CGRectMake(0, 135, self.view.frame.size.width, self.view.frame.size.height)  

取决于UITableView中是否有任何内容。 (如果UITableView为空,则设置为第二个,如果它至少有一行,则设置为第一行。)

我遇到的问题是,有时当按下保存或删除按钮后UITableView被设置回(0,0)时,UITableView的第一行被导航栏覆盖,而不是低于它。

如何确保我的UITableView设置在导航栏下方?

1 个答案:

答案 0 :(得分:0)

如果您正在使用XIB文件,则可以向视图控制器添加模拟导航栏,以便您可以适当调整元素,使它们不相交。

enter image description here

以编程方式,您可以将tableview的内容插入设置为导航栏的高度+状态栏,如下所示:

self.tableView.contentInset = UIEdgeInsetsMake(44,0,0,0);

当您滚动表格内容时使用插入内容将位于导航栏后面,因此如果您不希望这种情况发生,您应该改变框架,就像您正在做的那样。然而,

CGRectMake(0, 135, self.view.frame.size.width, self.view.frame.size.height)

可能会表现得很奇怪,因为你已经将部分视图从屏幕上移开了,因为你已经将高度设置为屏幕的高度,但你已经将帧偏移了135.这将是正确的矩形:

CGRectMake(0, 135, self.view.frame.size.width, self.view.frame.size.height - 135)

我个人建议您使用插图,但如果移动框架,请确保从高度中减去y偏移量。