Ios UI分段控制错误分区

Ios UI分段控制错误分区,ios,uiview,uiimage,uisegmentedcontrol,Ios,Uiview,Uiimage,Uisegmentedcontrol,我正在用下面的代码自定义应用程序中的所有分段控件。最初,我将所选分段设置为索引2 在IOS 6中,一切都很完美。当我在IOS 5上测试应用程序时,我意识到分段控件的初始设置有一个bug。选定和未选定状态之间的分离图像设置不正确。因此,它看起来像这样 如果我通过点击segmentedcontrol来更改所选的段,则其行为正常。这非常奇怪。我应该做些什么来防止这种奇怪的行为 UISegmentedControl *localSegmentedControl = [[UISegmentedC

我正在用下面的代码自定义应用程序中的所有分段控件。最初,我将所选分段设置为索引2

在IOS 6中,一切都很完美。当我在IOS 5上测试应用程序时,我意识到分段控件的初始设置有一个bug。选定和未选定状态之间的分离图像设置不正确。因此,它看起来像这样

如果我通过点击segmentedcontrol来更改所选的段,则其行为正常。这非常奇怪。我应该做些什么来防止这种奇怪的行为

     UISegmentedControl *localSegmentedControl = [[UISegmentedControl alloc] init];

     if ([localSegmentedControl respondsToSelector:@selector(setBackgroundImage:forState:barMetrics:)]) {

    UIImage *segmentUnselectedSelectedDivider       = [UIImage imageNamed:@"segmentedControlSeperatorNS.png"];
    UIImage *segmentSelectedUnselectedDivider       = [UIImage imageNamed:@"segmentedControlSeperatorSN.png"];
    UIImage *segmentUnselectedUnselectedDivider     = [UIImage imageNamed:@"segmentedControlSeperatorNN.png"];

    UIImage *segmentUnselected = [[UIImage imageNamed:@"barButtonPlain.png"] stretchableImageWithLeftCapWidth:7 topCapHeight:0];
    UIImage *segmentSelected = [[UIImage imageNamed:@"doneButton.png"] stretchableImageWithLeftCapWidth:7 topCapHeight:0];


    [[UISegmentedControl appearance] setBackgroundImage:segmentUnselected
                                               forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setBackgroundImage:segmentSelected
                                               forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];


    [[UISegmentedControl appearance] setDividerImage:segmentUnselectedUnselectedDivider
                                 forLeftSegmentState:UIControlStateNormal
                                   rightSegmentState:UIControlStateNormal
                                          barMetrics:UIBarMetricsDefault];

    [[UISegmentedControl appearance] setDividerImage:segmentSelectedUnselectedDivider
                                 forLeftSegmentState:UIControlStateSelected
                                   rightSegmentState:UIControlStateNormal
                                          barMetrics:UIBarMetricsDefault];

    [[UISegmentedControl appearance] setDividerImage:segmentUnselectedSelectedDivider
                                 forLeftSegmentState:UIControlStateNormal
                                   rightSegmentState:UIControlStateSelected
                                          barMetrics:UIBarMetricsDefault];


}


我认为这是一个已知的错误。 这里也是一样,有一个变通办法,可能对你有用


当我使用段控制时,我对同样的问题感到非常疲倦。我破解了那个密码

  UIImage *segmentSelected =
[[UIImage imageNamed:@"ikisiSecildiKirmizi.png"]
 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 5, 15)];
UIImage *segmentUnselected =
[[UIImage imageNamed:@"ikisiSecilmediGri.png"]
 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 5, 15)];
UIImage *segmentSelectedUnselected =
[[UIImage imageNamed:@"solSecili.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 5, 15)];
UIImage *segUnselectedSelected =
[[UIImage imageNamed:@"sagSecili.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 5, 15)];

UIImage *segmentUnselectedUnselected =
[[UIImage imageNamed:@"ikisideSecilmemis.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 5, 15)];

[fiyatSaat setBackgroundImage:segmentUnselected
                     forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[fiyatSaat setBackgroundImage:segmentSelected
                     forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

[fiyatSaat setDividerImage:segmentUnselectedUnselected
       forLeftSegmentState:UIControlStateNormal
         rightSegmentState:UIControlStateNormal
                barMetrics:UIBarMetricsDefault];

[fiyatSaat setDividerImage:segmentSelectedUnselected
       forLeftSegmentState:UIControlStateSelected
         rightSegmentState:UIControlStateNormal
                barMetrics:UIBarMetricsDefault];

[fiyatSaat setDividerImage:segUnselectedSelected
       forLeftSegmentState:UIControlStateNormal
         rightSegmentState:UIControlStateSelected
                barMetrics:UIBarMetricsDefault];

NSDictionary *attributes = [NSDictionary dictionaryWithObject:[UIColor blackColor]
                                                       forKey:UITextAttributeTextColor];
[fiyatSaat setTitleTextAttributes:attributes
                         forState:UIControlStateNormal];
NSDictionary *attributes2 = [NSDictionary dictionaryWithObject:[UIColor whiteColor]
                                                       forKey:UITextAttributeTextColor];
[fiyatSaat setTitleTextAttributes:attributes2
                         forState:UIControlStateHighlighted];

在尝试了所有相关的方法后,在

我发现问题与分离线的宽度有关。中关于分段控制自定义的教程假设分离图像的宽度大于2px(在视网膜中)。
我把它们精确地做成了2倍宽,问题就解决了。

你的分段背景和分隔线的大小是多少?分段背景和分隔线的大小是相同的33x34,用于视网膜显示-我的答案有一个可行的解决办法。