如何增加UISegmentedControl总宽度?

时间:2014-12-05 22:16:01

标签: ios swift uisegmentedcontrol

要事先明确,我不会询问如何修改各个UISegmentedControl细分或按钮的宽度。

我的最终目标是在UISegmentedControl中创建一个UIScrollView。此UISegmentedControl将能够无限期地增加其细分数量。

要完成此操作,每次添加细分时,我都需要增加UISegmentControl本身的 宽度。有没有什么办法可以增加 总宽度 ,而无需在每次添加细分时重新创建全新的UISegmentedControl对象?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

@MatthiasBauch的评论帮助我追踪整个解决方案,详情如下:

注意 :我正在使用Autolayout,因此无论我在哪里使用Storyboard,您都必须使用程序化的等效替换它。

1)首先,在故事板上拖出“分段控件”。
2)为刚刚添加的控件创建一个插座 3)此外,按住Ctrl键并单击控件,然后拖动到自身。然后单击“宽度”以添加宽度约束。
4)现在,打开文档大纲(编辑器>“显示文档大纲”)
5)打开分段控制所在的“视图”,然后打开分段控件的下拉列表(默认情况下,我的名称为“First,Second”)。然后打开“约束”。
6)按住Ctrl并单击刚刚创建的“宽度”约束,然后将其拖动到视图控制器以为其创建插座。这将允许您以编程方式调整宽度。

使用下面提到的文章,您可以按如下方式更新约束(使用动画...奖励!)

转到要用于更新宽度的方法,然后执行以下操作:

let desiredWidthChange = 30.0

self.widthConstraint.constant = 
    self.mySegmentedControl.constant + desiredWidthChange

self.mySegmentedControl.setNeedsUpdateConstraints()

UIView.animateWithDuration(0.5, animations: { () -> Void in
    self.mySegmentedControl.layoutIfNeeded() // Captures all of the frame changes.
    println("Width updated successfully")
})

参考:
Are NSLayoutConstraints animatable?