web-dev-qa-db-ja.com

UISegmentedControlの角の半径を変更する方法は?

UISegmentedControlの角の半径を変更することはできますか? UIViewの角の半径を変更するために使用する次のアプローチを試しました。

    self.segmentedControl.layer.cornerRadius = 15.0;
    self.segmentedControl.layer.masksToBounds = YES;

UISegmentedControlのコーナーを切り取るだけであるため、これは機能しませんでした。 enter image description here

ありがとう!

34
wz366

これは動作するはずです:

self.segmentedControl.layer.cornerRadius = 15.0;
self.segmentedControl.layer.borderColor = [UIColor whiteColor].CGColor;
self.segmentedControl.layer.borderWidth = 1.0f;
self.segmentedControl.layer.masksToBounds = YES;

CornerRadiusを設定した後、境界線を指定する必要があります。

97
xi.lin

UISegmentedControlをUIView内に埋め込み、UIViewのコーナー半径を設定します。

Objective-C

outerView.layer.cornerRadius = CGRectGetHeight(outerView.bounds) / 2;
outerView.layer.borderColor = [UIColor blueColor].CGColor;
outerView.layer.borderWidth = 1;

スイフト

outerView.layer.cornerRadius = CGRectGetHeight(outerView.bounds) / 2
outerView.layer.borderColor = UIColor.blueColor().CGColor
outerView.layer.borderWidth = 1

Cornered UISegmentedControl

34
Yakiv Kovalsky

セグメント化されたコントロールは、その角を描画する方法を変更しないため、独自の方法で角を描画し続け、その後、角を切り取ります。セグメント化されたコントロールがどのように境界形状を描くかは管理していません。描画方法が気に入らない場合は、独自の代替コントロールをゼロから考案する必要があります。あなたがやろうとしている種類に合法的に来ることができる最も近いのは、セグメント化されたコントロールの背景画像を設定することです。

10
matt

Swift 3およびXcode 8.2の互換性のために更新

    mySegmentedControl.layer.cornerRadius = 25.0
    mySegmentedControl.layer.borderColor = UIColor.white.cgColor
    mySegmentedControl.layer.borderWidth = 1.0
    mySegmentedControl.layer.masksToBounds = true
5
deijmaster

以前のソリューションは私にとってはうまくいきませんでした。私の解決策は次のとおりです。

UISegmentedControlをスーパービュー内に埋め込むには、UISegmentedControlの境界を切り取るために、先頭、末尾、末尾、先頭の制約に-1を割り当てます。最後に、スーパービューを次のように構成する必要があります。

segmentedControl.superview.clipsToBounds = true
segmentedControl.superview.layer.cornerRadius = 0 //whatever
segmentedControl.superview.layer.borderWidth = 1
segmentedControl.superview.layer.borderColor = segmentedControl.tintColor.CGColor
4
Andrea Mugnaini

結果は、他の何か(カスタム描画?)がレイヤーではなく境界を制御するためです。幸いなことに、レイヤー設定が優先されるようです。

必要な境界線の色がわかっている場合は、追加するだけです(例)。

self.segmentedControl.layer.borderColor = [UIColor whiteColor].CGColor;
self.segmentedControl.layer.borderWidth = 1.0;
4
Mihai Timar

これは、 Yakivの投稿Swift 4.1およびXcode 9.3の変換済みで動作するコードです。

segmentedOuterView.layer.cornerRadius = segmentedOuterView.bounds.height / 2
segmentedOuterView.layer.borderColor = UIColor.red.cgColor
segmentedOuterView.layer.borderWidth = 1
segmentedOuterView.layer.masksToBounds = true
3
atereshkov

次のコードを使用します。

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

layerなしでも可能です。あなたが試すことができます

segmentedControl.borderColor = UIColor.line
segmentedControl.borderWidth = 1
segmentedControl.cornerRadius = 8
0
Miravzal