gpt4 book ai didi

ios - 在用作导航项的 UISegmentedControl 上模拟角标(Badge)

转载 作者:行者123 更新时间:2023-12-01 16:22:14 26 4
gpt4 key购买 nike

我有一个 UIViewController嵌入在 UINavigationController 中.此 View Controller 的导航项是 UISegmentedControl有 3 段。我正在尝试找到一种方法来为每个分割市场添加一个"new"角标(Badge)。看来 UISegmentedControl通常不允许您这样做,但我认为出于我的目的,也许我可以使用自定义 UIView 来模拟它。位于每个段的左边缘或右边缘。我知道我可以得到 UISegmentedControl 的宽度并且由于自动大小模式设置为“等宽”,我可以简单地将总宽度除以 3 来确定每个段的大致宽度似乎是合理的。

但是,有几件事我不确定:

  • 是否可以确定 UISegmentedControl 的 x/y 位置?在导航栏中,以便我知道自定义 View 的位置?
  • 那么是否可以在导航栏包含的空间内的这些位置添加自定义 View ?
  • 最佳答案

    在 Segment Control 上方添加 Views,放置约束。
    enter image description here

    ViewDidLoad()使用代码

     self.badge1.addSubview(self.addCounter(count: 0))
    self.badge2.addSubview(self.addCounter(count: 9))

    使用此功能制作角标(Badge)计数器
    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

    关于ios - 在用作导航项的 UISegmentedControl 上模拟角标(Badge),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53227590/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com