Iphone UISegmentedControl没有圆角?

Iphone UISegmentedControl没有圆角?,iphone,cocoa-touch,uikit,uisegmentedcontrol,Iphone,Cocoa Touch,Uikit,Uisegmentedcontrol,有没有办法摆脱UISegmentedControl的圆角,或者这是默认行为?没有,没有API可以让您控制段的布局 您可以尝试查看UISegmentedControl的view.subview,并根据需要更改它们。但根据我个人的经验,我不建议这样做。如果苹果在未来改变他们的订单,你的应用程序可能会崩溃。最简单的方法是创建自定义UIButtons,其行为类似于切换按钮,并像UISegmentedControls一样控制它们(切换按钮请参见)。如果您想要不同的外观,您可以将其子类化,然后在-drawR

有没有办法摆脱UISegmentedControl的圆角,或者这是默认行为?

没有,没有API可以让您控制段的布局


您可以尝试查看UISegmentedControl的view.subview,并根据需要更改它们。但根据我个人的经验,我不建议这样做。如果苹果在未来改变他们的订单,你的应用程序可能会崩溃。最简单的方法是创建自定义UIButtons,其行为类似于切换按钮,并像UISegmentedControls一样控制它们(切换按钮请参见)。

如果您想要不同的外观,您可以将其子类化,然后在
-drawRect:
中绘制自己的图形。有关使用石英/核心图形绘制的参考信息,请参阅。

有一件事非常简单,您可以做它来清除UI分段控件上的圆形垃圾。。。将样式更改为“7”。我不是开玩笑。我刚想出来:

    // Magic number ... (it's cheating, but it works)
  mySegmentedBar.segmentedControlStyle = 7;  
这与它们在UISearchBar的范围栏中使用的控件样式相同,如下所示:

但是,如果有人只想要范围栏,而不需要搜索,他们通常会被这样的UISegmentedControl垃圾所困扰(带圆角):

或者更糟,这

谢天谢地,通过切换到条样式“7”,我们获得了停止条的精确外观,而不需要所有的子类化和drawRect黑客操作:


经过多次尝试,我得到了以下解决方案,该解决方案在没有任何背景图像或子类化的情况下运行良好:

    mySegmentedControl.tintColor = [UIColor clearColor]; //Clear all border

    //Draw your own border
    mySegmentedControl.layer.borderColor = [UIColor blackColor].CGColor;
    mySegmentedControl.layer.borderWidth = 1.0;

    //Set tint color for selected subview
    UIColor *tintcolor=[UIColor redColor];
    int subViewIndex = 0; //index which is selected
    [[_segmentControl.subviews objectAtIndex:subViewIndex] setTintColor:tintcolor]; 

通过添加具有合理宽度的边框,您可以获得方形外观:

self.segmentedControl.tintColor = [UIColor brownColor];
self.segmentedControl.layer.cornerRadius = 0.0;
self.segmentedControl.layer.borderColor = [UIColor brownColor].CGColor;
self.segmentedControl.layer.backgroundColor = [UIColor colorWithWhite:1 alpha:0.75].CGColor;
self.segmentedControl.layer.borderWidth = 1.5f;
self.segmentedControl.layer.masksToBounds = YES;

如果有人仍然感兴趣,下面是Swift 4(iOS 11)中的简单扩展。只需确保在调用此方法之前设置了“染色颜色”。如果在之后更改染色颜色,请确保再次调用此方法:

extension UISegmentedControl {

func ignoreCornerRadius() {

    let renderer = UIGraphicsImageRenderer(size: bounds.size)

    let normalImage = renderer.image { (context) in
        tintColor.setStroke()
        context.stroke(bounds)
    }
    let selectedImage = renderer.image { (context) in
        tintColor.setFill()
        context.fill(bounds)
    }

    setBackgroundImage(normalImage, for: .normal, barMetrics: .default)
    setBackgroundImage(selectedImage, for: .selected, barMetrics: .default)

}

}

这算是私人API吗?@GregCombs已经有一段时间了,想知道这个问题的答案吗^。。。有点,但不是真的?您没有调用任何您无权访问的方法,但您使用的是一个没有公开密钥的整数值。我还没听说有人(包括我自己)因为这件事被判死刑。不管怎样,iOS7看起来似乎让这成为一个没有意义的观点,因为所有的东西都是带有细线的文本。