问题描述
我试图找到一种方法来根据滚动位置更改 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]];
}
解决方法
让我提供以下示例,可以帮助您找出或获得一些想法以更好地解决问题。
那个 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
的颜色。在你的情况下,你有另一种情况。