模拟正在用作导航项的UISegmentedControl上的标志

问题描述 投票:1回答:1

我有一个嵌入在UIViewController中的UINavigationController。该视图控制器的导航项目是带有3个细分的UISegmentedControl。我正在尝试找到一种向每个细分市场添加“新”徽章的方法。看来UISegmentedControl通常不允许您执行此操作,但是我认为出于我的目的,也许我可以使用位于每个段的左边缘或右边缘的自定义UIView来模拟此操作。我知道我可以得到UISegmentedControl的宽度,并且由于自动调整大小模式设置为“相等宽度”,因此我可以将总宽度除以3来确定每个段的近似宽度似乎是合理的。

但是,有些事情我不确定:

  1. 是否可以确定导航栏中UISegmentedControl的x / y位置,以便我知道自定义视图的放置位置?
  2. 然后可以在导航栏所包含的空间内的这些位置添加自定义视图吗?
ios swift uinavigationcontroller uisegmentedcontrol badge
1个回答
0
投票

在“细分控件”上方添加视图,放置约束。enter image description here

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()
    }
}

以及最终结果enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.