【问题标题】:How to add a custom UIView to UINavigationBar in only one UIViewController如何仅在一个 UIViewController 中将自定义 UIView 添加到 UINavigationBar
【发布时间】:2014-02-17 00:58:35
【问题描述】:

好的,所以我正在尝试向我的 navigationController 的导航栏添加一个子视图,它工作得很好,但是,当推送一个细节控制器时,我不希望在细节视图控制器中看到来自推送控制器的那个子视图导航栏。

感谢您提供的任何帮助/建议。重申一下:我需要子视图只显示在导航控制器的根目录中,而不是在任何细节控制器中。

这是我当前创建和添加导航控制器子视图的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.ImageView = [[UIImageView alloc]init];
    self.ImageView.frame = CGRectMake(0, 8.5, 320, 36);
    self.ImageView.contentMode = UIViewContentModeScaleAspectFit;
    self.ImageView.image = [UIImage imageNamed:@"Logo"];
    self.ImageView.clipsToBounds = YES;
    [self.navigationController.navigationBar addSubview:self.ImageView];
}

【问题讨论】:

  • 为什么要在导航栏上添加 uiimageview。你可以简单地尝试 setBackgroundImage
  • 你不知道 UINavigationBar 的 setBackgroundImage
  • 不,这根本不是我想要的。我正在为其中的徽标制作动画。
  • 动画意味着您在代码中实现或使用 GIF 图像
  • 可能会发布您的屏幕截图

标签: ios objective-c uiview uiviewcontroller uinavigationcontroller


【解决方案1】:

最好的办法是

  1. 为您的 imageView 添加标签。
  2. 使用标签访问您的 imageView,并在您要显示此内容的 mainViewcobtroller 的 viewWillAppear 中将其 alpha 设置为 1。
  3. 在新视图控制器的 viewWillAppear 方法中,使用相同的标签访问视图,然后将其 alpha 设置为 0。

这应该可以解决您的问题 如果您需要代码,请评论。

【讨论】:

  • 我之前尝试过类似的方法(减去视图标记方法),发生的情况是当我使用默认的边缘弹出手势时,它会出现在错误的视图控制器中并出现闪烁。
  • 请使用这种方法并注意 viewWillAppear 方法而不是 viewDidAppear。
  • 我正在使用 viewWillAppear 方法,问题是它在使用交互式弹出手势时立即出现。
  • 好的,看来唯一的解决方案是在细节控制器中使用 viewWillAppear,并在呈现控制器中使用 viewDidAppear 来解决此问题。
【解决方案2】:

也许你可以标记视图,self.ImageView.tag = 100;然后在细节控制器的viewWillAppear中:

 UIView view = (UIView *) [self.navigationControler.navigationBar viewWithTag:100];
 view.hidden = true;

在视图中将消失

 UIView view = (UIView *) [self.navigationControler.navigationBar viewWithTag:100];
 view.hidden = false;

【讨论】:

    【解决方案3】:

    当你推送到 otherViewControllers 时添加这一行

     [[self.navigationController.navigationBar viewWithTag:101] removeFromSuperview];
    

    从其他 viewController 重新创建;

    - (void)viewWillApper
    {
    
        self.ImageView = [[UIImageView alloc]init];
        self.ImageView.frame = CGRectMake(0, 8.5, 320, 36);
        self.ImageView.contentMode = UIViewContentModeScaleAspectFit;
        self.ImageView.image = [UIImage imageNamed:@"Logo"];
        self.ImageView.clipsToBounds = YES;
        self.ImageView.tag =101;
        [self.navigationController.navigationBar addSubview:self.ImageView];
    }
    

    【讨论】:

      【解决方案4】:

      这将影响调用视图 ocontroller:
      在您的 navigationController 的 Root 视图控制器中

      - (void) viewDidLoad {
              // Create / instantiate from Nib / Use already initialized UIView
              [self.navigationItem setTitleView:<your subView here>];
      }
      

      当您导航到其他视图控制器时,子视图将不存在。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-31
        • 2016-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多