2

iOS 6 へのアップグレード以降、カスタマイズを行ったすべての UISegmentedControl で表示の問題が発生しています。こんな感じです。

UISegmentedControl

iOS 5 ではまったく問題なく、iPhone 4 (iOS 5) シミュレーターで実行すると正しく表示されます。

これは私が使用しているコードです:

UIImage *segmentUnselected = [[UIImage imageNamed:@"segmentedcontrol"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)];
UIImage *segmentSelected = [[UIImage imageNamed:@"segmentedcontrol_selected"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)];
[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setBackgroundImage:segmentSelected forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault];

UIImage *segmentDivider = [UIImage imageNamed:@"segmentedcontrol_divider"];

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

[[UISegmentedControl appearance] setDividerImage:segmentDivider
                             forLeftSegmentState:UIControlStateDisabled
                               rightSegmentState:UIControlStateDisabled
                                      barMetrics:UIBarMetricsDefault];

私が使用している画像は問題ないはずです。通常のサイズと @2x の 2 つのサイズがあります。それについて詳細を教えてほしい場合は教えてください。

[アップデート]

「通常の」imageNamed:@""でキャップインセットのサイズ変更可能な画像を削除すると、問題が解決しました。

4

2 に答える 2

1

同じ問題が発生しました: iOS6へのアップグレードによって影響を受ける外観プロキシ

仕切りを削除するように提案されましたが、それでも空きの青いスペースが表示されます。 ここに画像の説明を入力してください

高さが異なる2つのセグメント化されたコントローラーがあります。iOS6では、ボタンの背景画像のサイズが正しく変更されていないようです。代わりに、仕切りで発生します。したがって、修正を投稿するまで、セグメント化されたすべてのコントローラーに同じ高さを使用する必要があります。

また

カスタムの高さでセグメント化されたコントローラーごとにサブクラスを作成し、その特定のクラスの外観プロキシを使用して画像を適用できます。

于 2012-09-25T09:55:57.267 に答える
0

セグメント化されたコントロールの各バーの幅を設定すると、うまくいきます。しかし、6 以外の ios バージョンでは、セグメント化されたコントロール全体の幅だけを指定します。

これにより、仕切りが大きく、セグメント化されたコントロール ボタンがフレームからはみ出す問題が修正されます。

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
if (version >= 6.0) {
    [[UISegmentedControl appearance] setWidth:70 forSegmentAtIndex:0];
    [[UISegmentedControl appearance] setWidth:70 forSegmentAtIndex:1];
}else{
    segmentedControl.frame = CGRectMake(0, 0, 139, 30);
}
于 2012-10-23T05:51:04.730 に答える