0

次のコードを使用して、アプリ内のすべてのセグメント化されたコントロールをカスタマイズしています。最初に、選択したセグメントをインデックス 2 に設定しました。

IOS 6 ではすべてが完璧に動作します。IOS5 でアプリをテストしているときに、セグメント化されたコントロールの初期設定にバグがあることに気付きました。選択状態と非選択状態の分離イメージが正しく設定されていません。そのため、このようになります。

セグメント化されたコントロールをタップして選択したセグメントを変更すると、正常に動作します。非常に奇妙です。この奇妙な動作を防ぐために他に何をすればよいですか?

初期設定

     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];


}
4

3 に答える 3

1

iOS 5 での UISegmentedControl のカスタマイズで説明されている関連するすべてのアプローチを試した後

問題が分離線の幅に関連していることがわかりました。http: //www.raywenderlich.com/4344/user-interface-customization-in-ios-5 のセグメント化されたコントロールのカスタマイズに関するチュートリアルでは、分離が画像の幅が 2px を超えています (Retina の場合)。幅を正確に 2px にすると、問題は解決しました。

于 2013-03-28T10:17:02.543 に答える
0

既知のバグだと思います。ここでは回避策と同じですが、うまくいくかもしれません。

iOS 5 での UISegmentedControl のカスタマイズ

于 2013-03-27T15:02:23.027 に答える
0

セグメント制御を使用すると、同じ問題に非常に疲れました。私はそのコードを解決しました

  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];
于 2013-03-27T16:08:54.503 に答える