【问题标题】:UITableview changing height when shown from different UINavigationControllers ('More')当从不同的 UINavigationControllers 显示时 UITableview 改变高度(“更多”)
【发布时间】:2010-12-11 21:31:26
【问题描述】:

当从 UINavigationController 中的 UITabBarController 呈现时,我遇到了 UITableViewController 的 tableView 更改其框架位置的问题。从常规选项卡显示时,框架很好。但是,如果我从“更多”部分移动并显示 UITableViewController,则表格视图会向下移动与导航栏相同的高度(我不希望它这样做)。当我测试正确和非正确位置之间的运行时框架坐标时,它显示为相同(0.0、0.0、320.0、411.​​0)。 这个问题只发生在我在一个导航控制器中显示 tableView 然后它被移动并显示在另一个之后,比如“更多”VC 到选项卡,或选项卡到“更多”VC

这是怎么回事,我该如何解决?

最后一张图片是应用启动时的样子,应该是这样,导航栏正下方的表格视图。然而,在前两个中,您可以看到 tableview 已被向下移动。

提前致谢!

【问题讨论】:

  • 当您单击更多导航按钮或更多是其他选项卡时会产生此问题。并且这些图片是同一页的(左侧有两个显示完成按钮,但有一个显示更多导航按钮)。
  • 也许添加一些您正在使用的代码。从呈现新视图的操作开始,然后是 viewDidLoad 或 viewWill / DidAppear 代表该表视图。
  • 不过就是这样,我没有手动设置任何自定义内容。我已经用常规的 UITableViewController 和 UIViewController 试过了。他们都这样做。所有 ViewController 都可以。这可能是 iOS 4.2.1 的错误吗?
  • 我认为这不是错误,因为某些不确定的原因有时会发生意外行为。我认为您需要在每次操作后设置表格框架。或者您可以尝试删除此表格并为视图创建新表格,这可能对您有所帮助。
  • Ishu,你能给我举个例子,删除表并为视图创建一个新表吗?

标签: iphone ios uitabbarcontroller uitableview


【解决方案1】:

我能够解决这个问题。事实证明,当您将 UINavigationController 中的 UITableView 控制器移动到 moreNavigationController 时,会将 44 个像素添加到 contentInset 和 scrollIndicatorInsets 的“顶部”变量中。我不确定为什么会发生这种情况,或者当 tableView 离开“moreNavigationController”时为什么没有删除这 44 个像素,但这是答案。我在 viewWillAppear 中调用这两行代码。

self.tableView.contentInset = UIEdgeInsetsMake(44.0, 0.0, 0.0, 0.0);
self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(44.0, 0.0, 0.0, 0.0);

【讨论】:

    【解决方案2】:

    UITableViewController 有这种行为,它总是试图最适合屏幕尺寸。 UITableViewController 非常适合全屏 tableview 但我建议不要使用 UITableViewController 而是通过实现数据源和委托来自己实现 tableViewControler。有些人确实将 resizeSubViews 设置为 NO 并解决了他们的问题,但我真的建议您自己重新创建控制器,这不是很多工作。

    【讨论】:

      【解决方案3】:

      重置表格视图 nib 文件的自动调整大小属性。

      你可以在里面找到它: 工具>属性检查器

      【讨论】:

      • 怎么样?你是说尺码检查员吗?
      【解决方案4】:

      首先使用XIB在视图中取一个UITableView。然后添加导航栏并调整表格视图的大小。你会得到你真正想要的。

      如果您仍然发现任何问题,请告诉我。

      【讨论】:

        【解决方案5】:

        如果您可以显示您的代码,或截取您的设置屏幕截图,这会容易得多。根据我的经验,创建 UITableViewController 实例并将它们连接到 Interface Builder 将扩展以填满屏幕。

        您如何将其连接到“更多”标签?如果它在两个选项卡中,并且您正在做任何动态,请检查您的 UITableViewController 类 viewDidLoad 方法。除非它们是单独的实例,否则您不必添加/删除/重新添加表。

        需要检查的地方:

        1. NSLog 你的 tableHeaderView 高度和位置
        2. NSLog 你的 tableFooterView 高度和位置
        3. 创建一个 backgroundView 并将其分配给 tableView 的 backgroundView 属性,以查看它的真实尺寸以及显示位置
        4. 检查 UITableViewController 的视图起始位置在哪里。

        希望我能提供更多帮助。想看看你的设置/代码。

        【讨论】:

          猜你喜欢
          • 2014-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-22
          • 2012-06-13
          • 2023-03-10
          • 2012-08-15
          相关资源
          最近更新 更多