UISegmentedControl和UIAppearance的奇怪行为

时间:2012-06-25 04:27:13

标签: ios uisegmentedcontrol uiappearance

我通过app委托中的这些语句设置分段控件的外观。

    [[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段时,一切看起来都很好。

enter image description here

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

enter image description here

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

图像尺寸:分隔线为2px宽(所有3幅图像尺寸相同),背景宽度分别为2像素。

任何想法或指示都会受到高度赞赏,过去10个小时我一直在试着寻找无法获得的解决方案。

1 个答案:

答案 0 :(得分:7)

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

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

setPreferences更新分段控件的值。