3

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

有没有人遇到过类似的情况并知道如何解决?

我设置外观的代码是:

  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];

它应该是什么样子:

它应该是什么样子

它看起来像什么:

在此处输入图像描述

4

3 回答 3

0

请确保您在应用程序委托 didfinishLaunching 中使用此应用程序,应用于所有视图控制器。我有相同的问题图像重叠。在一个地方使用它解决了问题。尝试使用 [uiview class] 而不是 [uinavigationBar class]

于 2014-11-28T13:15:29.100 回答
0

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

于 2012-05-29T14:45:20.653 回答
0

我已经使用 backgroundImage 作为UINavigatorBar通过外观,并注意到使用该方法与UISplitViewController/UIPopoverController整个导航栏一起移动到内容区域。所以你只看到深蓝色的边框,自定义的导航栏位于边框的正下方,看起来很奇怪。

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

于 2012-02-23T10:00:55.950 回答