UISegmentedControl和UIAppearance的奇怪行为

Ase*_* H. 5 uisegmentedcontrol ios 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];
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

在此输入图像描述

如果我点击AZ然后释放,它会纠正自己.仅当视图首次加载且所选段为Release或AZ时,才会出现此错误.选择"顺序"并加载视图时,分隔符始终显示正常.

图像尺寸:分隔线宽2px(所有3个图像尺寸相同),背景宽2 px.

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

jrt*_*ton 7

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

[self performSelector:@selector(setPreferences) withObject:nil afterDelay:0.0];
Run Code Online (Sandbox Code Playgroud)

其中setPreferences更新分段控件的值.