5

iOS 5の新しいUIAppearanceAPIを使用してUISegmentedControl、カスタム グラフィックスでスタイルを設定しています。実行中にいくつかのセグメントを無効に設定できるようにする必要がありますが、UIAppearanceメソッドでは状態の分割イメージを設定できないようですUIControlStateDisabled

私は電話しています:

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

disabledSelectedImageこのリソースからのサイズ変更可能な画像はどこにありますか:

無効化された選択画像

しかし、左側のセグメントを無効 ( [UISegmentedControl setEnabled:forSegmentAtIndex:]) に設定すると、結果は次のようになります。

UISegmentedControl UI の不具合

が-分割イメージUISegmentedControlを使用するようにデフォルト設定されていることがはっきりとわかります。UIControlStateNormalUIControlStateNormal

を使用して背景画像を設定するのは完全に幸せそうですUIControlStateDisabled

[[UISegmentedControl appearance] setBackgroundImage:disabledImage
                                    forState:UIControlStateDisabled
                                    barMetrics:UIBarMetricsDefault];

(無効状態のときに提供する画像を尊重します)が、分割画像ではありません。誰かがこれに遭遇したか、解決策を見つけましたか?

4

6 に答える 6

3

これは iOS のバグに違いないと判断し、Appleにレーダーを提出しました。今のところ、問題に対する私の解決策は、セグメントを無効にするのではなく、セグメントを削除することです。

于 2012-03-12T19:40:06.230 に答える
1

少し醜い回避策ですが、アップルがそれ自体を修正するまで、次の方法で修正できました。

まず、UISegmentedControl をサブクラス化し、以下を追加する必要があります。

@implementation MJSegmentedControl

- (void)layoutSubviews
{
    [super layoutSubviews];
    NSInteger cachedIndex = self.selectedSegmentIndex;
    self.selectedSegmentIndex = 0;
    self.selectedSegmentIndex = cachedIndex;
}

@end
于 2012-09-01T09:52:54.760 に答える
0

私は同じ問題を抱えていましたが、それは本当にバグのようです。しかし、私は解決策(回避策)を見つけました。

コントローラーでXIBファイルを使用しました。XIB ファイルでは、セグメント化されたコントロールが配置され、すべてのカスタマイズが-viewDidLoadメソッドで行われました。

次に、XIB のビュー全体を表す UIView サブクラスを作成しました。すべてのビュー カスタマイズ コードを-awakeFromNibこの UIView サブクラスのメソッドに移動することが可能になりました。このコードを移動した後、仕切りの画像が適切に設定されました。

于 2013-01-11T11:28:54.863 に答える
0

iOS 5 の外観コントロールを使用する必要はまだありませんが、それでもうまくいかない場合は、セグメント化されたコントロールの子としてサイズ変更可能な画像を追加して、醜さを隠すことができます。これはハックですが、機能する可能性があり、比較的前方互換性があります。自動サイズ変更マスクを適切に設定してください。

于 2012-03-12T01:50:51.133 に答える