我有一个嵌入在UIViewController
中的UINavigationController
。该视图控制器的导航项目是带有3个细分的UISegmentedControl
。我正在尝试找到一种向每个细分市场添加“新”徽章的方法。看来UISegmentedControl
通常不允许您执行此操作,但是我认为出于我的目的,也许我可以使用位于每个段的左边缘或右边缘的自定义UIView
来模拟此操作。我知道我可以得到UISegmentedControl
的宽度,并且由于自动调整大小模式设置为“相等宽度”,因此我可以将总宽度除以3来确定每个段的近似宽度似乎是合理的。
但是,有些事情我不确定:
UISegmentedControl
的x / y位置,以便我知道自定义视图的放置位置?在ViewDidLoad()
中使用代码
self.badge1.addSubview(self.addCounter(count: 0))
self.badge2.addSubview(self.addCounter(count: 9))
使用此功能进行徽章计数
func addCounter(count: Int)->UIView {
// Count > 0, show count
if count > 0 {
// Create label
let fontSize: CGFloat = 10
let label = UILabel()
label.font = UIFont.systemFont(ofSize: fontSize)
label.textAlignment = .center
label.textColor = .white
label.backgroundColor = .red
// Add count to label and size to fit
label.text = "\(NSNumber(value: count))"
label.sizeToFit()
// Adjust frame to be square for single digits or elliptical for numbers > 9
var frame: CGRect = label.frame
frame.size.height += CGFloat(Int(0.4 * fontSize))
frame.size.width = (count <= 9) ? frame.size.height : frame.size.width + CGFloat(Int(fontSize))
label.frame = frame
// Set radius and clip to bounds
label.layer.cornerRadius = frame.size.height / 2.0
label.clipsToBounds = true
// Show label in accessory view and remove disclosure
return label
} else {
return UIView()
}
}