UISegmentedControl 和 UIAppearance 的奇怪行为
Posted
技术标签:
【中文标题】UISegmentedControl 和 UIAppearance 的奇怪行为【英文标题】:Weird behavior with UISegmentedControl and UIAppearance 【发布时间】:2012-06-25 04:27:13 【问题描述】:我正在通过应用程序委托中的这些语句设置分段控件的外观。
[[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 中以重新选择段),由于某种未知原因,分隔符设置不正确。
如果我点击 A-Z,然后点击 Release,它会自行纠正。此错误仅在视图首次加载且所选段为 Release 或 A-Z 时发生。选择 Order 并加载视图时,分隔线总是看起来很好。
图像尺寸:分隔线宽 2px(所有 3 张图像尺寸相同),背景各 2 px 宽。
任何想法或建议都将受到高度赞赏,过去 10 小时我一直在努力寻找解决方案。
【问题讨论】:
在viewDidLoad
中设置UISegmentedControl
的选定索引后,调用UISegmentedControl
的setNeedsDisplay
方法。也许这会解决问题。
我也看到了这个问题。该死的:(
@runmad 解决方法如下,如果您还在寻找...
【参考方案1】:
我认为这是 UISegmentedControl 的一个错误。您可以通过在延迟后设置选定的段来解决它,以允许控制时间自行绘制。您甚至不必使用实际的延迟,就像这样:
[self performSelector:@selector(setPreferences) withObject:nil afterDelay:0.0];
setPreferences
更新分段控件的值。
【讨论】:
效果很好。但我想知道这背后的真正原因是什么? 因为它将在第一个运行循环之后执行(已绘制分段控制)!此错误是已知错误并在 ios 6 中修复 这个 bug 奇怪地再次出现在 ios7 中以上是关于UISegmentedControl 和 UIAppearance 的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章
带有 UISegmentedControl 的 UIStackView
具有动态大小和 SegmentedItems 的 UISegmentedControl
UISegmentedControl 和 UIAppearance 的奇怪行为
带有 UISegmentedControl 和 childViewController 的 iOS LargeTitle(在容器中)