2012-02-15 62 views
3

我在titleBar中有一个应用程序,它用于在3个导航控制器之间切换。我正在使用新的外观代理方法来设计这个segmentedControl(代码如下)。但是,似乎有某种我无法弄清楚的错误。当我潜入其中一个导航控制器然后导航回根(然后再次显示顶部栏中的segmentedControl)时,它就会出现。当发生这种情况时,屏幕截图就会变得混乱,就像你在屏幕截图中看到的那样(第一张图显示了它应该看起来的样子)。segmentedControl和UIAppearance代理的图形问题

有没有人遇到类似的东西,并知道如何解决它?

我的代码来设置appearence是:

UIImage *segmentSelected   = [[UIImage imageNamed:@"sel"]  resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)]; 
UIImage *segmentUnselected   = [[UIImage imageNamed:@"uns"]  resizableImageWithCapInsets:UIEdgeInsetsMake(0, 3, 0, 3)]; 
UIImage *segmentSelectedUnselected = [[UIImage imageNamed:@"sel-uns"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)]; 
UIImage *segUnselectedSelected  = [[UIImage imageNamed:@"uns-sel"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)]; 
UIImage *segmentUnselectedUnselected = [[UIImage imageNamed:@"uns-uns"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)]; 

[[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] 
     setBackgroundImage:segmentUnselected forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
[[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] 
     setBackgroundImage:segmentSelected forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 
[[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] 
     setDividerImage:segmentUnselectedUnselected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
[[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] 
     setDividerImage:segmentSelectedUnselected forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
[[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] 
     setDividerImage:segUnselectedSelected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 
[[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] 
     setContentPositionAdjustment:UIOffsetMake(8, 0) forSegmentType:UISegmentedControlSegmentLeft barMetrics:UIBarMetricsDefault]; 
[[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] 
     setContentPositionAdjustment:UIOffsetMake(-8, 0) forSegmentType:UISegmentedControlSegmentRight barMetrics:UIBarMetricsDefault]; 

什么是应该的样子:

what it is supposed to look like

是什么样子:

enter image description here

回答

0

我使用了012的backgroundImage通过外观,并注意到使用该方法连同一个UISplitViewController/UIPopoverController整个导航栏被移动到内容区域。所以你只能看到darkblue边框,并且自定义的导航栏位于边界下方,看起来很奇怪。

对你没有帮助,但它可能是一个真正的错误?

0

我有同样的问题。最终我最终使用了1px宽的分隔图像 - >然后问题消失了。

0

请确保您在应用程序代理didfinishLaunching中使用此应用程序的所有视图controller.I具有相同的问题图像重叠。使用它在一个地方解决问题。尝试[uiview类]而不是[uinavigationBar类]