【问题标题】:Why is my UITableview Y origin changing based upon the position in TabBarController为什么我的 UITableview Y 原点会根据 TabBarController 中的位置而变化
【发布时间】:2015-07-03 14:48:59
【问题描述】:

点击第一个屏幕上的按钮后,用户会看到包含在标签栏控制器中的视图控制器。视图控制器中有两个表视图,第一个是顶部静态表,第二个表就在下面。标签栏控制器中不在“更多”中的视图控制器正确显示。如果我转到“更多”并选择一个视图控制器,则视图将显示为顶部单元格被按下。

如果我进入“更多”屏幕,单击编辑,并以任何方式移动视图控制器的顺序,通过“更多”显示的视图控制器正确显示。离开“更多”部分时,不会显示顶部表格单元格(顶部表格)。

在我看来,UI 或情节提要中存在问题是合理的,但是没有任何问题会引起我的注意。我已经尝试过手动设置约束和使用建议的约束。

此示例项目可在https://github.com/propstm/NavigationStructureTest 获得

【问题讨论】:

    标签: ios uitableview uitabbarcontroller xcode-storyboard


    【解决方案1】:

    我只是更新了 Two Table VC 中的约束,然后问题就不存在了。

    【讨论】:

    • 你使用什么约束?我已经更新了示例的 master 分支,在情节提要上没有任何问题,而且问题对我来说仍然存在。
    • 这些值对我不起作用。将顶部布局指南的顶部空间设置为 -44 将顶部 tableview 推到导航栏下方。您能否将拉取请求推送到示例项目?
    • 我已提出拉取请求
    【解决方案2】:

    禁用Size类,并删除“垂直空间到顶部布局指南”的约束(top tableView),将pin top space添加到超级视图可以解决问题。 也许这是 Xcode 的一个错误,请参阅this

    【讨论】:

    • 为什么要投反对票然后投赞成票?这是无法理解的答案?
    • 删除顶部布局指南并使用图钉既适用于示例应用程序,也适用于存在问题的较大客户端应用程序。感谢您分享该链接——问题的解决方案不是我自己能解决的。
    【解决方案3】:

    我认为这与 TabBarController 提供的“更多”控制器有关,该控制器具有自己的导航控制器,并且您的故事板设置为将边缘延伸到顶栏之外。

    虽然您试图隐藏导航栏,但我认为它是在错误的位置完成的,并且只有在“更多”控制器中显示该项目时才需要。它当前实现的方式混淆了顶部布局指南,假设有两个顶部栏,即使其中一个被隐藏,它似乎也被留下了。

    我能够通过两种方式修复您的演示项目。通过:

    1) 更新storyboard,关闭tab bar的“extend edges”(设置tab bar和top bar不透明):

    2) 简化 viewWillAppear/Disappear 和 viewDidAppear/Disappear 方法,并在标签栏更多控制器时隐藏导航栏:

    - (void)viewDidAppear:(BOOL)animated{
        //self.navigationItem.backBarButtonItem.title = @"HOME";
    
        self.tabBarController.title = @"Entity List";
    
        //Pretty activity indicator
        [self.topTableView reloadData];
    }
    
    - (void)viewWillAppear:(BOOL)animated {
        if (self.navigationController == self.tabBarController.moreNavigationController) {
            [self.tabBarController.navigationController setNavigationBarHidden:YES];
        } else {
            [self.navigationController setNavigationBarHidden:NO];
        }
    }
    
    - (void)viewWillDisappear:(BOOL)animated {
        [self.navigationController.navigationBar setHidden:NO];
    }
    
    - (void)viewDidDisappear:(BOOL)animated {
    }
    

    这可确保顶部导航正确显示而不会弄乱布局指南。

    【讨论】:

      猜你喜欢
      • 2012-10-03
      • 2013-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多