web-dev-qa-db-ja.com

セグメント化されたコントロールの背景色がセグメント化された境界線を越えてにじむのを防ぐ方法

UISegmentedControl.backgroundColorに色を設定すると、その色がコントロールの端からはみ出していることに気付きました(ただし、ビューの境界を超えていません)。次に、セグメント化されたコントロールの背景色を白に設定し、コンテナービューの背景色を灰色に設定した例を示します。 http://i.imgur.com/yHYT14C.png

セグメント化されたコントロールのAutoLayout制約を設定して、intrinsicContentSizeを使用するようにしましたが、この問題について他の人が投稿したことはありません。

上の画像は私がそれを見てもらうことができた最高のものであることに注意してください...それが約3-4px出血してしまう前に。

私はビューをclipSubviewsに、UIViewをマスクするレイヤーをmasksToBoundsに設定しようとしましたが、出血がビュー/レイヤーの境界内に含まれていると想定しているため、問題を修正することは期待していませんでした。

提案やアドバイスはありがたいです。そうでない場合は、出血を修正するUISegmentedControlをサポートする画像を作成する必要がありますが、控えめに言っても、それを維持するのは面倒です。

38
Mike Maxwell

セグメントコントロールのレイヤーのコーナー半径を4.0に設定します。それは役立つはずです。レイヤーのプロパティにアクセスできるようにするには、QuartzCoreをインポートする必要がある場合があります。

segment.layer.cornerRadius = 4.0;
segment.clipsToBounds = YES;
76
Leo Natan

セグメントコントロールレイヤーのコーナー半径を5に設定し、ClipsToBoundsをYESにします。

segmentController.layer.cornerRadius = 5;    
segmentController.clipsToBounds = YES;

あなたのためにその仕事を願っています

9
Yogesh Kumar

swiftで達成できる最高の結果:

    segmentedControl.layer.cornerRadius = 4
    let mask = CAShapeLayer()
    mask.frame = CGRectMake(0, 0, segmentedControl.bounds.size.width-1, segmentedControl.bounds.size.height);
    let maskPath = UIBezierPath(roundedRect: mask.frame,
                                byRoundingCorners: [.BottomLeft, .BottomRight, .TopLeft, .TopRight],
                                cornerRadii: CGSize(width: 4.0, height: 4.0))
    mask.path = maskPath.CGPath
    segmentedControl.layer.mask = mask
4
protspace