【问题标题】:iOS view doesn't display any of it's subviews when added as a subview of NavigationController's view当添加为 NavigationController 视图的子视图时,iOS 视图不显示它的任何子视图
【发布时间】:2014-11-17 09:53:16
【问题描述】:

我有一个 NavigationController,我想制作一个 View,它可以从屏幕顶部动画并位于 navigationBar 上方。我正在从 xib 初始化 viewcontroller,当我将它添加为 [self.view addSubview:myView]; 时它工作得很好,但它位于导航栏下方。当我尝试将其添加为 [self.navigationController.view addSubview:myView]; 时,它按预期将其放置在 navigationBar 顶部,但视图不显示任何放置在 xib 中的子视图。我不明白为什么会这样,已经尝试解决了好几个小时。

更新 我来自 xib 的自定义视图与自定义 ViewController 类配对,我在其中添加了以下代码:

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];

NSLog(@"!!! %i", [self.view.subviews count]);

}

如果我将 myView 添加到 self.view 它会打印 1(实际上有 1 个子视图),但是当我将它添加为 self.navigationController.view -viewDidAppear 时甚至不会被调用。但它确实出现在没有子视图的屏幕上。现在我更加困惑了。

【问题讨论】:

    标签: ios objective-c iphone uinavigationcontroller addsubview


    【解决方案1】:

    我认为你需要使用这个:

    [self.navigationController.navigationBar addSubview:myView];

    【讨论】:

    • 不,仍然没有子视图。
    • 您确定添加了完全需要的视图吗?可能没有子视图?尝试检查 myView.subviews.count
    • 我敢肯定,因为当我将此行更改为 [self.view addSubview:myView]; 时,子视图会按预期显示。这对我来说真的很奇怪。
    • 实际上我试图做计数的事情,即使实际显示子视图,它在两种情况下都会打印 0。我很困惑。
    • 可能是...您的内容正在其他视图中显示,当您删除它时(添加到另一个视图时),您让他们绘制,试试 [myView removeFromSuperview];
    【解决方案2】:

    如果不需要导航控制器,为什么不直接删除它?另一种方法是隐藏导航栏,以便视图占据完整空间,然后在需要时再次显示导航栏。 如果您提供一些带有视图的代码,我可以提供更多帮助。

    【讨论】:

    • 这确实是一个解决方案。这里的问题是我有一个视图,它是 navigationController.view 的子视图,位于 navigationBar 下方(将其视为大于栏本身的 navigationBar 的背景),我也必须隐藏它。第二个问题是动画不会那么流畅。在我的情况下,在 navigationController 的视图之上放置一个视图将是一个更好的解决方案。
    【解决方案3】:

    原来我是个白痴。这是一个非常简单的范围问题。我在方法中实例化了我的 VC 的一个局部变量,当然它最后被释放了。一旦我将我的 VC 分配给一个全局变量,所有这些都开始像魅力一样工作。就这么简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      相关资源
      最近更新 更多