在iOS7上,我们可以通过以下方式更改导航栏的颜色
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
但是这种方法在更改barTintColor时具有淡入淡出动画,那么有没有人知道如何阻止此动画并立即更改颜色?
更具体地说,我编写了一个测试程序,其窗口的根控制器是navigationController。在导航控制器中,有一个带有 3 个按钮的视图控制器。3 个按钮都绑定到以下操作:
- (void)onClick:(id)sender
{
UIColor *color = nil;
if (sender == self.redButton)
{
color = [UIColor redColor];
}
else if (sender == self.blueButton)
{
color = [UIColor blueColor];
}
else if (sender == self.blackButton)
{
color = [UIColor blackColor];
}
self.navigationController.navigationBar.barTintColor = color
// [UIView animateWithDuration:0 animations:^{
// self.navigationController.navigationBar.barTintColor = color;
// }];
// [CATransaction begin];
// [CATransaction setDisableActions:YES];
// self.navigationController.navigationBar.barTintColor = color;
// [CATransaction commit];
}
将动画持续时间更改为 0 或使用[CATransaction setDisableActions:YES]
都不起作用,动画仍然存在。
希望有人能帮忙,谢谢!
在再次设置之前,请尝试将 barTintColor 设置为 nil。
self.navigationController.navigationBar.barTintColor = nil;
self.navigationController.navigationBar.barTintColor = color;
我有一个类似的问题,它为我解决了它。希望对您有所帮助。
您需要禁用隐式动画。您可以按如下方式执行此操作:
[CATransaction begin];
[CATransaction setDisableActions: YES];
self.navigationItem.leftBarButtonItem.tintColor = [UIColor colorWithRed:125.0/255.0 green:90.0/255.0 blue:146.0/255.0 alpha:1];
[CATransaction commit];
此技术适用于任何隐式动画。隐式动画是 iOS 在更改可设置动画属性时为您创建的动画。有关更多信息,请参阅此处:
https://developer.apple.com/library/ios/documentation/cocoa/conceptual/coreanimation_guide/CreatingBasicAnimations/CreatingBasicAnimations.html
将UINavigationBar
上的translucent
属性设置为 NO
,然后在更改条形色调后重置它
self.navigationBar.translucent = NO;
self.navigationBar.barTintColor = [UIColor magentaColor];
self.navigationBar.translucent = YES;
尝试使用
[UIView animateWithDuration:0 animations:^{
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
}];