gpt4 book ai didi

ios - 在像 Twitter 这样的每个 View Controller 中使用不同颜色的导航栏(不使用 setbartintcolor)

转载 作者:技术小花猫 更新时间:2023-10-29 11:21:28 26 4
gpt4 key购买 nike

如下图所示,Twitter 为每个推送的 View Controller 使用不同的导航栏颜色。

我几乎尝试了所有方法(setbackgroundimage、backgroundcolor、bartintcolor 等),但似乎没有任何效果。我认为 Twitter 使用自定义转换来模拟推送,因为在我看来,每个 View Controller 都有自己的导航栏和自己的颜色。

enter image description here enter image description here

最佳答案

如果你想用不同的 barTintColor 处理 navigationBarCode School 有一个教程。 ( iOS App: Creating a Custom Nav Bar )它还可以通过使用 setBackgroundImage:forBarMetrics: 方法扩展到不同的背景。

有以下四个步骤:

  1. 在源 View Controller 的 viewWillAppear 中处理这个,隐藏 navigationController 提供的 navigationBar 并创建一个新的 navigationBarsuperView

    - (void)styleNavBar
    {
    // 1. hide the existing nav bar
    [self.navigationController setNavigationBarHidden:YES animated:NO];

    // 2. create a new nav bar and style it
    UINavigationBar *newNavBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 64.0)];
    [newNavBar setTintColor:[UIColor whiteColor]];

    // 3. add a new navigation item w/title to the new nav bar
    UINavigationItem *newItem = [[UINavigationItem alloc] init];
    newItem.title = @"Source";
    [newNavBar setItems:@[newItem]];

    // 4. add the nav bar to the main view
    [self.view addSubview:newNavBar];
    }
  2. 在目标 View Controller 的 viewWillAppear 中使用相同的技巧,并创建一个 backBarButtonItem 作为新的 navigationBarleftBarButtonItem.

    - (void)styleNavBar 
    {
    [self.navigationController setNavigationBarHidden:YES animated:NO];
    UINavigationBar *newNavBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 64.0)];
    [newNavBar setTintColor:[UIColor blueColor]];
    UINavigationItem *newItem = [[UINavigationItem alloc] init];
    newItem.title = @"Destination";

    // BackButtonBlack is an image we created and added to the app’s asset catalog
    UIImage *backButtonImage = [UIImage imageNamed:@"BackButtonBlack"];

    // any buttons in a navigation bar are UIBarButtonItems, not just regular UIButtons. backTapped: is the method we’ll call when this button is tapped
    UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithImage:backButtonImage
    style:UIBarButtonItemStylePlain
    target:self
    action:@selector(backTapped:)];

    // the bar button item is actually set on the navigation item, not the navigation bar itself.
    newItem.leftBarButtonItem = backBarButtonItem;

    [newNavBar setItems:@[newItem]];
    [self.view addSubview:newNavBar];
    }
  3. 填写 backTapped: 方法,以便用户能够从目标 View Controller 点击弹出框。

    - (void)backTapped:(id)sender
    {
    [self.navigationController popViewControllerAnimated:YES];
    }
  4. 考虑到滑动弹出的情况,在目标 View Controller 的 viewWillAppear 中将手势识别器的委托(delegate)设置为 self(作者:这里的解决方案有点hack。)

    - (void)viewWillAppear:(BOOL)animated
    {
    [super viewWillAppear:animated];
    [self styleNavBar];

    __weak id weakSelf = self;
    self.navigationController.interactivePopGestureRecognizer.delegate = weakSelf;
    }

关于ios - 在像 Twitter 这样的每个 View Controller 中使用不同颜色的导航栏(不使用 setbartintcolor),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26131677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com