Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UISegmentedControl背景图像奇怪的行为_Ios_Objective C_Uisegmentedcontrol - Fatal编程技术网

Ios UISegmentedControl背景图像奇怪的行为

Ios UISegmentedControl背景图像奇怪的行为,ios,objective-c,uisegmentedcontrol,Ios,Objective C,Uisegmentedcontrol,我正在做一个iOS项目,遇到了这个奇怪的问题。我有一个UISegmentedControl元素,属于bar样式。它有3个部分。分段的固定大小为80。我还有3个图像,每个片段都被选为背景。这里有一个 加载视图时,其中一个线段被设置为选中,该图像被设置为背景,如下所示: [self.genderSelectionButton setBackgroundImage:[UIImage imageNamed:@"gender-switch01.png"] forState:UIControlStateN

我正在做一个iOS项目,遇到了这个奇怪的问题。我有一个
UISegmentedControl
元素,属于
bar
样式。它有3个部分。分段的固定大小为80。我还有3个图像,每个片段都被选为背景。这里有一个

加载视图时,其中一个线段被设置为选中,该图像被设置为背景,如下所示:

[self.genderSelectionButton setBackgroundImage:[UIImage imageNamed:@"gender-switch01.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
现在,当我在5.1模拟器上运行项目时,我得到了分段按钮的扭曲视图:

正如你所看到的,中间部分保持了我给出的大小,但是图像是从中间延伸到边缘的。 即使我已将选定段设置为
,也会突出显示选定段。 在侦听按钮选择的方法中,我更改背景图像并获得以下结果:

(背景图像再次拉伸…)

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

编辑


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

设置完整背景图像似乎不是处理自定义分段按钮的最佳方法。找到了一个例子

以下是执行所有操作的基本代码:

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

这可能有助于你我的一般问题不是色彩,而是背景图像拉伸。。。不过还是要谢谢你。在我的脑海里,我想说的是问题不是改变背景图像,而是把分段控制宽度和分段宽度的计算搞砸了(使用固定宽度有时可以做到这一点)。试着稍微弄乱一下大小,看看它们是否符合您的期望,或者发布分段控件创建代码以扫描错误。可能重复