【问题标题】:iPhone UITableView overlaps UITabBar When Displaying it as a SubviewiPhone UITableView 在将其显示为子视图时与 UITabBar 重叠
【发布时间】:2023-03-11 22:55:02
【问题描述】:

我有一个自定义 TabViewController,它根据选择的 UITabBarItem 向当前视图添加子视图。对于不同的子视图,我模拟了导航栏和选项卡栏,以便子视图在显示时与格式匹配。包含 UILabel 的一个子视图显示正常,但是具有 UITableView 的子视图与 UITabBar 重叠。但是在 Interface Builder 中,我将 UITableView 的大小调整为不会切断 UITabBar。

在 TabViewController 中添加子视图

[self.view addSubview:subViewController.view];

【问题讨论】:

  • 您是使用 IB 还是代码进行视图?好像你都在使用!
  • 我正在使用 IB 只是更改代码中的控制器
  • 如果是这样,那么你就不需要这个了。 [self.view addSubview:subViewController.view]; 如果它们在 IB 中正确连接,应该可以。
  • 这是一个自定义的 TabViewController,它扩展了 UIViewController 以便能够将其推送到导航堆栈上

标签: iphone objective-c user-interface interface-builder


【解决方案1】:

您没有提供足够的信息来确定,但我认为您将表格视图添加到错误的视图中。假设 self 是您的 UITabBarController 子类,您将在覆盖整个屏幕的视图中添加自定义视图,包括标签栏。

相反,您应该将自定义视图添加到所选视图控制器的视图中:

[self.selectedViewController.view addSubview:subViewController.view];

这将限制您添加到标签栏控制器内容区域的内容,并且不会与标签栏重叠。

不过,我不确定你想用这种方法完成什么:似乎将 subViewController 添加到 UITabBarController 管理的视图控制器集合中更有意义,而不是弄乱视图层次结构.

此外,从 nib 加载视图然后在代码中操作它们本身并没有错。 “混合样式”不是问题。

【讨论】:

    【解决方案2】:

    正如 Legolas 所说,您似乎在这里混合了各种风格。鉴于听起来您需要从代码中推送它,您可以尝试从代码中完全实例化对象,例如:

    UITableView *table = [[UITableView alloc] initWithFrame:CGRectMake(x, y, width, height)];
    table.delegate = self; //or whatever the delegate is
    table.dataSource = self; //or wherever the datasource is
    

    ...然后将其添加到您需要的任何视图中。

    如果这一切都失败了,请仔细检查您的笔尖,并确保您为是否显示标签栏、导航栏等设置了正确的选项,因为这会影响大小。

    【讨论】:

      猜你喜欢
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多