【问题标题】:iOS 5 UINavigationBar removing subviews ( image subview) removes navigation bariOS 5 UINavigationBar 删除子视图(图像子视图)删除导航栏
【发布时间】:2011-12-06 13:08:12
【问题描述】:

在我在 iOS 4 上运行良好的应用程序中,从 iOS 5 开始导航栏消失了。这是我认为导致问题的原因:我正在删除 RootViewController viewWillAppear 方法中的子视图:

for(UIView* view in self.navigationController.navigationBar.subviews)
    {
        if ([view isKindOfClass:[UILabel class]]) 
        {
            [view removeFromSuperview];
        }
        if([view isKindOfClass:[UIImageView class]])
        {
            [view removeFromSuperview];
        }
    }

我这样做是因为我推送到导航控制器上的第二个视图控制器将图像和标签添加到导航栏,当视图弹出时我必须删除它们。在 iOS 5 中,上面的代码删除了导航栏。如何解决此问题或以正确的方式支持 iOS4 和 iOS 5?

【问题讨论】:

    标签: objective-c ios xcode ios5


    【解决方案1】:

    为这些图像和 uilabel 设置标签,然后从上面的代码中删除它就可以了。

    for(UIView* view in self.navigationController.navigationBar.subviews)
    {
       if(view.tag == 9 || view.tag == 99)
       {
          [view removeFromSuperview];
       }
    }
    

    【讨论】:

    • 是的,这在技术上是可行的,但是如果您或其他人需要稍后再返回到它,您的代码就会变得难以理解。您冒着无法有效阅读和跟踪代码在做什么的风险。至少将这些标签设为常量以帮助查看您要删除的内容。
    • 您可以使用以下代码简单地删除子视图 [(UILabel *)[self.navigationController.navigationBar viewWithTag:yourViewTag] removeFromSuperview];
    【解决方案2】:

    您可以使添加的视图成为它们各自 UIKit 类的子类,并检查这些特定的子类。但实际上,要获得最清晰、最易读的代码,您应该将导航控制器和导航栏子类化以允许绘制自定义图像和标签,这样您就可以简单地将背景图像和前景标签设置为 nil。组装起来需要一点时间,但最终结果会更具可扩展性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 2012-02-05
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 2023-03-21
      相关资源
      最近更新 更多