2

私は iOS プロジェクトに取り組んでおり、この奇妙な問題に遭遇しました。私はスタイルのUISegmentedControl要素を持っています。bar3 つのセグメントがあります。セグメントのサイズは 80 に固定されています。各セグメントを選択して背景として設定する 3 つの画像もあります。その中の一つがこちらです』

ここに画像の説明を入力

ビューが読み込まれると、セグメントの 1 つが選択済みとして設定され、この画像が次のように背景として設定されます。

[self.genderSelectionButton setBackgroundImage:[UIImage imageNamed:@"gender-switch01.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

5.1 Simulator でプロジェクトを実行すると、セグメント化されたボタンが歪んで表示されます。

ここに画像の説明を入力

ご覧のとおり、中央のセグメントは指定したサイズのままですが、画像は中央から端まで引き伸ばされています。に設定しても、選択したセグメントが強調表示されますNO。ボタンの選択をリッスンするメソッドでは、背景画像を変更して次のように取得します。 ここに画像の説明を入力

(背景画像がまた引き伸ばされています…)

iOS6でもほぼ同じことが起こります。今、私は何か間違ったことをしていますか、これを修正する方法はありますか??

編集

通常のボタン、選択されたボタン、および仕切り用の個別の画像を使用した、より良い実装が見つかりました。以下の回答を参照してください。

4

1 に答える 1

1

完全な背景画像を設定することは、カスタム セグメント化されたボタンを処理する最良の方法ではないようです。例はここにあります

すべてを行う基本的なコードは次のとおりです。

UIImage *segmentSelected = 
    [[UIImage imageNamed:@"segcontrol_sel.png"] 
        resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)];
UIImage *segmentUnselected = 
    [[UIImage imageNamed:@"segcontrol_uns.png"] 
        resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)];
UIImage *segmentSelectedUnselected = 
    [UIImage imageNamed:@"segcontrol_sel-uns.png"];
UIImage *segUnselectedSelected = 
    [UIImage imageNamed:@"segcontrol_uns-sel.png"];
UIImage *segmentUnselectedUnselected = 
    [UIImage imageNamed:@"segcontrol_uns-uns.png"];

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

[[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];
于 2013-02-27T14:35:04.353 に答える