在滚动时更改后退按钮的色调颜色

问题描述

我试图找到一种方法来根据滚动位置更改 backBarButtonItem 的色调。在下面的例子中,按钮认应该是黄色的,但在某个阈值下它应该变成红色。

虽然使用断点我可以看到在每个块中触发的代码,但不幸的是 backBarButtonItem 永远不会变成红色并且始终保持黄色。关于为什么会这样的任何建议?我假设导航栏中的后退按钮一旦设置就无法更改。

    CGFloat totalHeight = CGRectGetMaxY(self.frame);
    CGFloat barHeight = CGRectGetHeight(self.frame);

    CGFloat offsetHeight = (self.scrollview.contentOffset.y - self.scrollViewMinimumOffset) + totalHeight;
    offsetHeight = MAX(offsetHeight,0.0f);
    offsetHeight = MIN(offsetHeight,totalHeight);
    
    if (offsetHeight > barHeight * 1.0f) {
        [self.backBarButtonItem setTintColor:[UIColor redColor]];
    } else {
        [self.backBarButtonItem setTintColor:[UIColor yellowColor]];
    }

解决方法

让我提供以下示例,可以帮助您找出或获得一些想法以更好地解决问题。

所以在故事板中(可以通过编程方式完成),我有以下场景: enter image description here

那个 backBarButtonItem 实际上是 1stVC 中的 NavigationBar 按钮。 为了改变backBarButtonItem的颜色,您可以实现以下代码(或查看):

import UIKit
class ViewController2: UIViewController {
    var counter = 0 //any conditions you want to play with

    override func viewDidLoad() {
        super.viewDidLoad()
        var color: UIColor = UIColor.purple //or yellow,by default
        if(counter == 0){
            color = UIColor.red
        }
        self.navigationController?.navigationBar.tintColor = color
    }
}

它在 viewDidLoad()ViewController2 方法中完成,以便在打开此 ViewController 后立即对其进行配置。

这里,我只是使用 counter 变量作为一个简单的例子来创建一些条件,根据该条件应该更改 backBarButtonItem 的颜色。在你的情况下,你有另一种情况。

所以这是输出: enter image description here