ios – UISegmentedControl分隔符错误

我的UISegmentedControl分隔符遇到了一个奇怪的错误.当我将手指拖开时,该段会丢失其突出显示的状态图像,但分隔符会保留它.为了实现这一点,我需要拖动大约100px.

向下,按目标:

向下,手指拖离目标:

假设0表示正常状态,1表示选择状态,2表示突出显示状态;我有所有适当的分频器图像,我为每个案例设置它们,即:

00, 01, 02
10, 11, 12
20, 21, 22

其他一切正常,如果我点击并按住目标没有问题.我不希望用户会点击和拖动,但我宁愿让它解决.有谁之前经历过这个吗?

最佳答案 无需为“11”和“22”状态提供分频器图像,因为从逻辑上讲,您不能拥有2个相邻的选定分段或2个相邻的突出显示分段.好吧,只有同时点击相邻的段才会突出显示它们,但不太可能.

因此,您应该有以下分隔图像:

00, 01, 02  
10, --, 12  
20, 21, --

此外,您还应该为所有3种不同的状态(正常,选定和突出显示)提供3个背景图像.这些背景图像的原因以及如何创建它们我已经解释了here(在那个解释中我只使用了2个背景图像用于“正常”和“选定”状态,但是如果要使用“突出显示”状态,则需要添加第3个背景图像).

下面的图表显示了如何在UISegmentedControl中使用这些图像:

然后使用以下外观方法设置它们:

// Set background images
[segmentedControl setBackgroundImage:background_image_normal
                            forState:UIControlStateNormal
                          barMetrics:UIBarMetricsDefault];
[segmentedControl setBackgroundImage:background_image_selected
                            forState:UIControlStateSelected
                          barMetrics:UIBarMetricsDefault];
[segmentedControl setBackgroundImage:background_image_highlighted
                            forState:UIControlStateHighlighted
                          barMetrics:UIBarMetricsDefault];

// Set divider images 0=Normal 1=Selected 2=Highlighted
[segmentedControl setDividerImage:divider_image_00
              forLeftSegmentState:UIControlStateNormal
                rightSegmentState:UIControlStateNormal
                       barMetrics:UIBarMetricsDefault]
[segmentedControl setDividerImage:divider_image_01
              forLeftSegmentState:UIControlStateNormal
                rightSegmentState:UIControlStateSelected
                       barMetrics:UIBarMetricsDefault]
[segmentedControl setDividerImage:divider_image_10
              forLeftSegmentState:UIControlStateSelected
                rightSegmentState:UIControlStateNormal
                       barMetrics:UIBarMetricsDefault]
[segmentedControl setDividerImage:divider_image_02
              forLeftSegmentState:UIControlStateNormal
                rightSegmentState:UIControlStateHighlighted
                       barMetrics:UIBarMetricsDefault]
[segmentedControl setDividerImage:divider_image_20
              forLeftSegmentState:UIControlStateHighlighted
                rightSegmentState:UIControlStateNormal
                       barMetrics:UIBarMetricsDefault]
[segmentedControl setDividerImage:divider_image_12
              forLeftSegmentState:UIControlStateSelected
                rightSegmentState:UIControlStateHighlighted
                       barMetrics:UIBarMetricsDefault]
[segmentedControl setDividerImage:divider_image_21
              forLeftSegmentState:UIControlStateHighlighted
                rightSegmentState:UIControlStateSelected
                       barMetrics:UIBarMetricsDefault]
点赞