如何更改UISegmentedControl的转角半径?

问题描述 投票:31回答:9

是否可以更改UISegmentedControl的转角半径?我尝试过以下方法,用于改变UIView的角半径。

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

这不起作用,因为你可以看到它只切断了UISegmentedControl角落。

谢谢!

ios cocoa-touch uiview uikit uisegmentedcontrol
9个回答
94
投票

这应该工作:

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后指定边框。


33
投票

在UIView中嵌入UISegmentedControl并为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


9
投票

分段控制不会改变它的角落,所以它继续以自己的方式绘制角落,然后你将其切断。您不负责分段控件如何绘制其边界形状。如果你真的不喜欢它的绘制方式,你将不得不从头开始设计自己的替代控件。你可以合理地接近你想要做的事情是设置分段控件的背景图像。


5
投票

更新了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

4
投票

你的结果是因为其他东西(自定义绘图?)控制边框而不是图层。幸运的是,图层设置似乎具有优先权。

如果您知道所需的边框颜色,可以添加(示例):

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

4
投票

之前的解决方案从未对我有用。我的解决方案是:

要将UISegmentedControl嵌入到superview中,然后将-1分配给约束前导,尾随,底部,顶部,以便切断UISegmentedControl边界。最后应该以这种方式配置superview:

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

3
投票

这是Yakiv's post的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

1
投票

使用以下代码:

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

0
投票

没有layer就有可能。你可以试试

segmentedControl.borderColor = UIColor.line
segmentedControl.borderWidth = 1
segmentedControl.cornerRadius = 8
© www.soinside.com 2019 - 2024. All rights reserved.