5

我正在通过应用程序委托中的这些语句设置分段控件的外观。

    [[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"segmentation_normal.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0 , 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"segmentation_selected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0 , 0, 0)] 
        forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_NormalNormal.png"]   forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_NormalSelected.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_SelectedNormal.png"] forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

结果很好。当我选择任何段时,背景和分隔符设置正确(应用程序首次启动时默认选择订单段)。当我选择 Release 部分时,如下所示,一切看起来都很好。

在此处输入图像描述

问题是当我离开视图然后返回视图时(我存储所选索引并将其设置在 viewDidLoad 中以重新选择段),由于某种未知原因,分隔符设置不正确。

在此处输入图像描述

如果我点击 AZ,然后点击 Release,它会自行纠正。此错误仅在视图首次加载且所选段为 Release 或 AZ 时发生。选择 Order 并加载视图时,分隔线总是看起来很好。

图像尺寸:分隔线宽 2 像素(所有 3 张图像大小相同),背景各 2 像素宽。

任何想法或指示将不胜感激,在过去的 10 个小时里,我一直在努力寻找解决方案。

4

1 回答 1

7

我认为这是 UISegmentedControl 的一个错误。您可以通过在延迟后设置选定的段来解决它,以允许控制时间自行绘制。您甚至不必使用实际的延迟,就像:

[self performSelector:@selector(setPreferences) withObject:nil afterDelay:0.0];

WheresetPreferences会更新分段控件的值。

于 2012-10-08T14:54:05.477 回答