在iOS 5中自定义UISegmentedControl

nim*_*sai 27 objective-c uisegmentedcontrol ios ios5

这是我的问题.我通过以下方式设置背景和分隔图像来自定义UISegmentedControl:

[[UISegmentedControl appearance] setDividerImage:segmentUnselectedUnselected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:segmentSelectedUnselected forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:segUnselectedSelected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setBackgroundImage:segmentSelected forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)

当我尝试将第一个分段选中时 viewDidLoad

self.segmentedControl.selectedIndex = 1;
Run Code Online (Sandbox Code Playgroud)

我得到以下奇怪的事情:

在此输入图像描述

代替:

在此输入图像描述

有谁知道这是一个错误,我怎么能提供错误报告?如果没有,我的代码可能出现什么问题?

Fer*_*uga 10

在做了一些测试并尝试了几个不同的位置进行定制之后,我相信这可能确实是一个错误.

即使使用非常简单的直接UISegmentedControl,这也是我得到的(使用Xcode 4.3.1,iOS 5.1):

在代码中启动并选择中间元素后: 在代码中启动并选择中间元素之后

用户单击并单击中间元素后: 用户单击后单击中间元素

我使用3px宽图像作为分隔符,1px宽图像作为背景.

编辑:我想我找到了一个解决方法:尝试排队指令以选择元素,而不是在viewDidLoad中执行它,如下所示:

dispatch_async(dispatch_get_main_queue(),^{
   self.segmentedControl.selectedSegmentIndex = 1;
});
Run Code Online (Sandbox Code Playgroud)

在我上面的例子中,排队该指令使其工作得很好.