在 Swift 3 中滚动动态 UISegmentedControl

Sat*_*man 6 uisegmentedcontrol human-interface ios swift

您好,我想创建一个包含 20 多个项目的动态 UISegmented 视图。我尝试了一下,但输出是这样的。

在此输入图像描述

文本被切片,不完全可见。我希望它向左和向右滚动并显示全文。有人可以帮我解决这个问题吗?tnx

视图控制器

override func viewDidLoad() {
    super.viewDidLoad()

    let items = ["All Fruits", "Orange", "Grapes", "Banana",  "Mango", "papaya", "coconut", "django"]
    let filtersSegment = UISegmentedControl(items: items)
    filtersSegment.frame = CGRect.init(x: 10, y: 60, width: 300, height: 50)
    filtersSegment.selectedSegmentIndex = 0
    filtersSegment.tintColor = UIColor.black
    filtersSegment.addTarget(self, action: #selector(self.filterApply), for: UIControlEvents.valueChanged)
    self.view.addSubview(filtersSegment)
}

@objc private func filterApply(segment:UISegmentedControl) -> Void {
    print("Selected Index : \(segment.selectedSegmentIndex)")
}
Run Code Online (Sandbox Code Playgroud)

iPa*_*tel 2

最好使用另一个控制器而不是分段控制器来实现您的目标。

但是如果您只使用分段控制器,那么您必须将分段控制器添加到滚动视图,因为标题是动态的,所以我们无法识别它的宽度,这就是原因。

首先将段控制器添加到滚动视图。段控制器有方法名称setWidth(_ width: CGFloat, forSegmentAt segment: Int)来设置索引处每个段的宽度。

所以我在这里写下我的逻辑。

    var scrollViewWidth:Float = 0.0
    let items  = ["All Fruits", "Orange", "Grapes", "Banana",  "Mango", "papaya", "coconut", "django"]
    for (index, element) in items.enumerated() {
        let size = element.size(attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 20.0)]) //you can change font as you want
        segmentCon.setWidth(size.width, forSegmentAt: index)
        scrollViewWidth = scrollViewWidth + Float(size.width)
    }

    // Here you can set content width of UIScollView by use of "scrollViewWidth"
    // scrollView.contentSize = CGSize(width: scrollViewWidth, height: 40)// height should whatever you want.
Run Code Online (Sandbox Code Playgroud)