【问题标题】:Tab bar covers UITableView's last cell标签栏覆盖 UITableView 最后一个单元格
【发布时间】:2011-03-28 15:35:09
【问题描述】:

我正在开发一个基于 Tab Bar 应用程序预设的应用程序。在其中一个选项卡中,我有一个显示大量数据的表格视图,但是当我滚动到底部时,表格视图中最后一个单元格的一半被选项卡栏覆盖。

谁有办法解决这个问题?

【问题讨论】:

    标签: iphone uitableview uitabbarcontroller


    【解决方案1】:

    查看标签栏的大小,并相应地调整表格视图的大小。阅读有关 frame 属性的文档,如果您为此目的使用 IB,IB 允许您设置事物的大小等。

    【讨论】:

      【解决方案2】:

      我发现唯一的解决方案是为 tableview 添加填充页脚:

      http://www.iphonedevsdk.com/forum/iphone-sdk-development/18180-resizing-uitableview-programatically.html

      【讨论】:

        【解决方案3】:

        真正的答案:

        我遇到了这个问题,最后到了这里……所以即使这是旧的,我也是这样解决这个问题的:

        我有一个 UITabBar 控制器,其中一个选项卡是 UIViewController,并且它添加了一行:

        [self.view addSubview:navController.view];
        

        这是错误 ..即使代码有效,但概念是错误的(至少在我的情况下),导航控制器应该直接链接到 UITabBar 作为选项卡之一...

        那么,真正的答案是什么?

        您一定是错误地实现了导航控制器。正如我所解释的那样,我遇到了这个问题,还有This Guy...

        【讨论】:

          【解决方案4】:

          添加页脚空间对我有用:

          //this prevent the tabbar to cover the tableview space
          UIView *footer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 90)];
          footer.backgroundColor = [UIColor clearColor];
          myTableView.tableFooterView = footer;
          

          【讨论】:

          • 在尝试了一整天不同的答案之后,这是唯一有效的方法。我什至不在乎这是否是黑客攻击
          【解决方案5】:

          选择您拥有tableview 的视图,打开属性检查器,在Simulated Metrics 部分中,为底部栏项目选择Tab Bar

          然后XCode 将更新您的视图,为TabBar 保留空间。所以你的tableview 不会被覆盖。

          【讨论】:

            【解决方案6】:

            我想你有一个自定义的 Tabbar,你需要将 Tabbar 的高度重置为这个 Tabbar 的背景图像的高度。

            UITabBar * tabbar = self.tabBar ; 
            [tabbar setBackgroundImage:[UIImage imageNamed:@"image.png"]] ; 
            [tabbar setFrame:CGRectMake(0, 480 - imageHeight, 320, imageHeight)];
            

            【讨论】:

              【解决方案7】:

              有几个解决方案。

              1.) 假设您使用的是半透明工具栏,您必须使工具栏不透明。

              2.) 如果您使用 StoryBoard 并且将 TableView 放在 ViewController 中,假设它是 ViewController 而不是 TableViewController。

              3.) 您可以手动添加填充/间距。

              if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
              {
                  self.edgesForExtendedLayout = UIRectEdgeNone;
                  self.extendedLayoutIncludesOpaqueBars = YES;
                  self.automaticallyAdjustsScrollViewInsets = NO;
              }
              

              UIEdgeInsets insets = UIEdgeInsetsMake (0,sizeOfTableView - sizeOfTabBar, 0, 0);
              self.tableView.contentInset = inset;
              self.tableView.scrollIndicatorInsets = inset;
              

              希望这对您有所帮助并祝您编码愉快!

              【讨论】:

                【解决方案8】:

                这在此处(在 Interface Builder 中)起到了作用:

                【讨论】:

                • 如果您在 iOS7 中使用情节提要构建视图时遇到此问题,那么这是适合您的解决方案。谢谢康纳安多!
                【解决方案9】:

                对我来说,只是 UIViewController 中的表格视图没有任何约束,一旦我固定到视图的边缘,它就会自行修复。

                【讨论】:

                  【解决方案10】:

                  我刚刚通过添加常数解决了这个问题...硬编码...找到适合您的阈值怎么样?

                  【讨论】:

                    【解决方案11】:

                    SWIFT

                    我一直遇到这个问题,当我将 UITableViewController 嵌入到 UITabBarController 中时,当完全向下滚动时,最后一个单元格(或底部或大单元格)将保留在 TabBar 下方。在尝试了一天的各种代码和解决方法都不起作用之后,我只是将我的 UITableViewController 重新嵌入到导航控制器中,导航控制器将它们嵌入到 TabBar 控制器中。间距是固定的,表格视图现在清除 tabBar。

                    【讨论】:

                      【解决方案12】:

                      斯威夫特 3:

                      这对我来说非常有效。此代码不仅停止显示在选项卡栏后面的最后一个单元格,而且还向上推滚动指示器。把代码放在你的viewDidLoad():

                      if let bottomInset = navigationController?.tabBarController?.tabBar.frame.size.height {
                          tableView.contentInset.bottom = bottomInset
                          tableView.scrollIndicatorInsets.bottom = bottomInset
                      }
                      

                      或者你可以这样做:

                      override func viewDidLayoutSubviews() {
                          super.viewDidLayoutSubviews()
                          tableView.contentInset.bottom = view.safeAreaInsets.bottom
                          tableView.scrollIndicatorInsets.bottom = view.safeAreaInsets.bottom
                      }
                      

                      【讨论】:

                        猜你喜欢
                        • 2013-10-19
                        • 2014-05-15
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多