2

我正在开发一个 iOS 项目,遇到了这个奇怪的问题。我有一个风格的UISegmentedControl元素。bar它有 3 个部分。这些片段的固定大小为 80。我还有 3 张图像,每个片段都被选为背景。这是其中之一`

在此处输入图像描述

加载视图时,将其中一个段设置为选中,并将此图像设置为背景,如下所示:

[self.genderSelectionButton setBackgroundImage:[UIImage imageNamed:@"gender-switch01.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

现在,当我在 5.1 模拟器上运行项目时,我得到了分段按钮的扭曲视图:

在此处输入图像描述

如您所见,中间部分保持我给出的大小,但图像从中间到边缘有点拉伸。即使我已将其设置为 ,也会突出显示选定的段NO。在侦听按钮选择的方法中,我更改了背景图像并得到以下信息: 在此处输入图像描述

(背景图又被拉长了……)

几乎相同的情况发生在 iOS6 上。现在我做错了什么,还是有办法解决这个问题?

编辑

找到了一个更好的实现,为普通按钮、选定按钮和分隔符使用单独的图像。请参阅下面的答案。

4

1 回答 1

1

似乎设置完整的背景图像不是处理自定义分段按钮的最佳方式。示例在这里找到。

这是完成所有操作的基本代码:

UIImage *segmentSelected = 
    [[UIImage imageNamed:@"segcontrol_sel.png"] 
        resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)];
UIImage *segmentUnselected = 
    [[UIImage imageNamed:@"segcontrol_uns.png"] 
        resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)];
UIImage *segmentSelectedUnselected = 
    [UIImage imageNamed:@"segcontrol_sel-uns.png"];
UIImage *segUnselectedSelected = 
    [UIImage imageNamed:@"segcontrol_uns-sel.png"];
UIImage *segmentUnselectedUnselected = 
    [UIImage imageNamed:@"segcontrol_uns-uns.png"];

[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected 
    forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setBackgroundImage:segmentSelected 
    forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

[[UISegmentedControl appearance] setDividerImage:segmentUnselectedUnselected 
    forLeftSegmentState:UIControlStateNormal 
    rightSegmentState:UIControlStateNormal 
    barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:segmentSelectedUnselected 
    forLeftSegmentState:UIControlStateSelected 
    rightSegmentState:UIControlStateNormal 
    barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] 
    setDividerImage:segUnselectedSelected 
    forLeftSegmentState:UIControlStateNormal 
    rightSegmentState:UIControlStateSelected 
    barMetrics:UIBarMetricsDefault];
于 2013-02-27T14:35:04.353 回答