【问题标题】:Why does my View Controller recognize that the Navigation Bar is present only sometimes?为什么我的视图控制器只在某些时候识别出导航栏?
【发布时间】:2015-02-25 02:34:16
【问题描述】:

我一直在寻找答案,但我似乎找不到答案,所以我求助于在这里提问。如果这是重复的,请指出正确的页面。

我有一个视图控制器,我在 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 设置在导航栏下方?

【问题讨论】:

    标签: ios objective-c iphone uitableview


    【解决方案1】:

    如果您使用的是 XIB 文件,您可以在视图控制器中添加一个模拟导航栏,它允许您适当地调整您的元素,使它们不会相交。

    您可以通过编程方式将 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 偏移量。

    【讨论】:

    • 我已经为此设置了所有程序。不幸的是,您的回答并没有解决我的问题。出于好奇,为什么在不减去 y 位置的情况下将其设置为 self.view.frame.size.height 会导致其行为异常?我以为 self.view.frame.size.height 只是返回了一个数字。
    • 确实如此,但您上下文中的数字将是您的全屏高度。由于您将框架向下移动 135,因此您的视图的一部分实际上不会显示,因为它位于窗口边界之外。您的问题是否仅在 tableView 加载并更改框架后出现?你能把你所有的 viewDidLoad 代码和你所有的调整高度的东西都包括进来吗?
    猜你喜欢
    • 2019-04-09
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多