web-dev-qa-db-ja.com

四角い角を持つUISegmentedControl

UISegmentedControlをサブクラスで変更して、丸みを帯びた角を削除したいと思います。コーナーラディウスを設定できないようです。 SegmentedControlを画面よりも広くする(したがって、コーナーを「切り落とす」)ことは、4つまたは5つのセグメントがあり、サイズが異なるため、オプションではありません。

これを行う方法はありますか?

ありがとう

21
Joseph

セグメントの幅を設定して( setWidth:forSegmentAtIndex: を使用)、左端と右端のセグメントを他のセグメントよりも簡単に大きく(たとえば10px大きく)してから、から10pxを切り取ることができます。どちらかの端と四角い角があります。画面の幅より大きくする必要はありません。代わりに、UIView内に配置し、それを使用して端をトリミングします。

一方、UIControl内のカスタムUIButtonのセットを使用して、独自のセグメント化されたコントロールを作成することもできます。

9
progrmr

角を正方形にするには、次のコードを使用します。

segmentContrl.layer.borderColor=*anycolor*.CGColor;
segmentContrl.layer.cornerRadius = 0.0;
segmentContrl.layer.borderWidth = 1.5f;
36
swathy krishnan

最初と最後のセグメントの「トリミング」部分に問題がある場合の1つの代替方法は、最初と最後のセグメント全体(ダミーの未使用セグメントを作成したもの)をトリミングすることです。そうすれば、すべてのセグメントに共通のサイズを維持できます。

15
Clafou

組み込みのカスタマイズ方法を使用して、セグメントの状態ごとに背景画像を設定するだけです。これにより、境界線が完全に上書きされます。背景画像が正方形の場合、セグメント化されたコントロールは正方形で表示されます。カスタマイズするセグメント状態ごとに、次のコードを使用します。

[segmentedControl setBackgroundImage:[UIImage imageNamed:@"square-background-image-selected"] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

11
josephap

Interface Builderでこれを実現する別の方法:

UIViewオブジェクトをUIViewControllerにドラッグします。これはUIViewのサブビューである可能性があります。

UISegmentedControlをUIViewのサブビューとしてドラッグします。これで、セグメント化されたコントロールがリストUIViewControllerオブジェクトでインデントされます。 (下のスクリーンショットを参照)。

そのフレームがUIViewオブジェクトの境界の外側になるように、SegementedControlのサイズを変更します。私の場合、SegementedControlのフレームをX = -10に設定し、SegementedControlの幅に+20を追加して、セグメント化されたコントロールの合計幅がUIViewオブジェクトよりも20大きいためです。 (うまくいけば、以下のスクリーンショットが役立つでしょう)。

また、UIViewオブジェクトとSegmentedControlの次の設定を調整しました。UIView:[Clip SubViews]をオンにし、[AutoResizeSubviews]をオフにします。 SegementedControl:[クリップサブビュー]のチェックを外し、[サブビューの自動サイズ変更]のチェックを外します。

enter image description here

5
Eliot Arntz