升级到 iOS 6 后 UISegmentedControl 的显示问题

Posted

技术标签:

【中文标题】升级到 iOS 6 后 UISegmentedControl 的显示问题【英文标题】:Display issue with UISegmentedControl after upgrade to iOS 6 【发布时间】:2012-09-22 06:35:53 【问题描述】:

自从升级到 ios 6 后,我的所有 UISegmentedControl 都出现了显示问题,我对其进行了一些自定义。这就是它的样子。

在 iOS 5 上完全没有问题,如果我在 iPhone 4 (iOS 5) 模拟器中运行,它显示正确。

这是我正在使用的代码:

UIImage *segmentUnselected = [[UIImage imageNamed:@"segmentedcontrol"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)];
UIImage *segmentSelected = [[UIImage imageNamed:@"segmentedcontrol_selected"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)];
[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setBackgroundImage:segmentSelected forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault];

UIImage *segmentDivider = [UIImage imageNamed:@"segmentedcontrol_divider"];

[[UISegmentedControl appearance] setDividerImage:segmentDivider
                             forLeftSegmentState:UIControlStateNormal
                               rightSegmentState:UIControlStateNormal
                                      barMetrics:UIBarMetricsDefault];

[[UISegmentedControl appearance] setDividerImage:segmentDivider
                             forLeftSegmentState:UIControlStateDisabled
                               rightSegmentState:UIControlStateDisabled
                                      barMetrics:UIBarMetricsDefault];

我使用的图像应该没问题,它们有两种尺寸正常和@2x。如果您希望我提供一些详细信息,请告诉我。

[更新]

使用“普通”imageNamed:@"" 删除 cap inset 可调整大小的图像为我解决了这个问题。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题: Appearance proxy affected by upgrade to iOS 6

有人建议我移除分隔线,但仍会显示一个空闲的蓝色空间:

我有两个不同高度的分段控制器。看起来在 iOS6 中,按钮的背景图像没有正确调整大小,而是发生在分隔符上。所以可能我们必须对所有分段控制器使用相同的高度,直到它们发布修复。

您可以为每个具有自定义高度的分段控制器创建一个子类,并使用该特定类的外观代理应用图像

【讨论】:

【参考方案2】:

在分段控件中设置每个条的宽度,它对我有用。但是对于 6 以外的任何 ios 版本,我只指定整个分段控件的宽度。

这应该可以解决分隔线过大导致分段控制按钮超出框架的问题。

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
if (version >= 6.0) 
    [[UISegmentedControl appearance] setWidth:70 forSegmentAtIndex:0];
    [[UISegmentedControl appearance] setWidth:70 forSegmentAtIndex:1];
else
    segmentedControl.frame = CGRectMake(0, 0, 139, 30);

【讨论】:

以上是关于升级到 iOS 6 后 UISegmentedControl 的显示问题的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap:CLI 升级到 6.5.0 后的 iOS 错误

IBM Worklight 6.1 - 升级到 v6.1 后,iOS 5 中的适配器调用失败

关于升级 Dubbo 版本到 2.6.5 后启动失败的“坑”

ios从iOS 6升级到iOS 7 [关闭]

升级到 xcode 6 后,找不到 OpenGLES/gltypes.h

升级到版本 11 后 Postgres 查询产生高磁盘 IO