奇怪的问题:将我的应用程序旋转为纵向,选择工具栏项并显示uipopovercontroller后,如果我旋转回横向,右侧的UINavigationController(SplitView的objectAtIndex:0)会更改导航栏的颜色。我不知道为什么。我在Interface Builder中将它设置为barStyle = UIBarStyleBlackOpaque;
在返回横向模式后变为银色。
只有当我将其旋转为纵向,创建弹出框并在导航控制器中选择一些内容时才会发生这种情况,这会推动另一个tableViewController。即使在viewDidLoad方法中设置属性也不会做任何事情。
有人有想法吗?
答案 0 :(得分:7)
viewDidLoad只会在第一次显示视图时被调用(或者由于内存问题而被清除)。尝试在viewWillAppear中重新设置barStyle,甚至 - splitViewController:willShowViewController:invalidatingBarButtonItem:。
答案 1 :(得分:2)
for Steve(检测RootViewControll的PoPView或splitView navigationBar)[splitview IPAD]
Yuo必须在这些方法中从detailviewcontroller调用的RootViewController上创建一个类方法(setLand:int i):
- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
// LANDSCAPE !!!!
[RootViewController setLand:1];
和
- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc {
// PORTRAIT!!
[RootViewController setLand:0];
并在RootViewController上:
static int landscape=2;
...
// SetMethod for class variable landscape
+ (void)setLand:(int)i
{
if(landscape!=i){
landscape = i;
}
}
最终在RootViewController
中 - (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if(landscape == 1)
{
//LANDSCAPE!
CUSTOM FOR LANDSCAPE
self.navigationController.navigationBar.barStyle =...
}
else if(landscape == 0)
{
//PORTRAIT!
CUSTOM FOR PORTRAIT
self.navigationController.navigationBar.barStyle =...
}
}
..这在我的应用程序中运行良好,编辑自定义横向/纵向导航栏
答案 2 :(得分:2)
4.2似乎存在问题,并在旋转后设置navigationBar的tintColor。您可以使用上面的答案正确设置barStyle,但不能使用tintColor。还有其他人有同样的问题吗?
答案 3 :(得分:2)
@Brendan G. Lim和其他任何使用tintColor时遇到问题的人,最后还是使用了自定义导航栏:
@interface CustomNavigationBar : UINavigationBar { } @end
@implementation CustomNavigationBar -(void)setTintColor:(UIColor *)tintColor { [super setTintColor :[self tintColor]]; } @end
打开MainWindow.xib,然后选择要设置颜色的导航栏。在您的身份窗格[Apple] [4]中选择CustomNavigationBar作为类。
在属性窗格[Apple] [1]中设置栏的颜色。
就是这样!
答案 4 :(得分:1)
很酷,修好了。
添加到我的RootViewController,其中声明了splitviewcontroller和导航栏:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:YES];
self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;
}
答案 5 :(得分:1)
我遇到了同样的问题但是在viewWillAppear中重置barStyle会导致另一个问题。设置它也会在弹出框中显示它时设置它,因此它不再匹配弹出颜色。如何将barStyle设置为我想要的仅当它在分割视图控制器的左窗格中显示时?我想我可以在视图中设置它只会在方向是横向但看起来很脏时出现。此外,在splitViewController中设置:willShowViewController:invalidatingBarButtonItem:根本不起作用,因为我认为在拆分视图控制器将样式设置回默认值之前调用它。对于苹果而言,这似乎是一个非常愚蠢的错误。它应该将它改回原来的样式,而不是默认样式。
答案 6 :(得分:1)
此问题已修复 使用以下代码
@implementation ChangeNavigationBarColor
- (void) setTintColor:(UIColor*)color
{
[super setTintColor:[[BrandingManager sharedBrandingManager] tintColorForNavigationController]];
}
@interface ChangeNavigationBarColor : UINavigationBar {
}
@end
答案 7 :(得分:1)
提起了一个关于几个星期前的错误报告,Apple说这是一个已知的4.2的错误。然后我问是否有办法解决这个问题,但到目前为止还没有回复。
将UINavigationbar替换为子类/自定义导航栏也没用。 popover似乎在UINavigatioBar上执行一些秘密讨厌的东西,这会杀死tintColor并且不允许重置它(即使在重置之后它也总是保持'nil'。)
我基本上放弃并告诉客户他必须忍受它,直到下一次更新(希望)。
答案 8 :(得分:0)
您可以使用单独的类来更改颜色,使背景颜色成为类,所需的颜色,然后将该类用作rootViewController的类。我做了,它有效。