Swift 将NSLayoutConstraints添加到UISegmentedControl会导致UISegmentedControl消失

Swift 将NSLayoutConstraints添加到UISegmentedControl会导致UISegmentedControl消失,swift,ios8,autolayout,uisegmentedcontrol,nslayoutconstraint,Swift,Ios8,Autolayout,Uisegmentedcontrol,Nslayoutconstraint,我有一个以编程方式定义的UISegmentedControl 我试图添加一个布局约束,这样当我的iPad旋转时,分段控件的大小就可以在旋转的视图中正确显示,而不是从屏幕上溢出 我应用以下约束: streamSegmentedControl.translatesAutoresizingMaskIntoConstraints = false let segmentedControlWidth = NSLayoutConstraint(item: streamSegmente

我有一个以编程方式定义的UISegmentedControl

我试图添加一个布局约束,这样当我的iPad旋转时,分段控件的大小就可以在旋转的视图中正确显示,而不是从屏幕上溢出

我应用以下约束:

        streamSegmentedControl.translatesAutoresizingMaskIntoConstraints = false

    let segmentedControlWidth = NSLayoutConstraint(item: streamSegmentedControl,
        attribute: .Width,
        relatedBy: .Equal,
        toItem: self.containerView,
        attribute: .Width,
        multiplier: 1.0,
        constant: -10.0)

    containerView.addConstraint(segmentedControlWidth)
My UIsegmentControl的定义如下:

      streamSegmentedControl = UISegmentedControl(items: ["Today's Events", "Past Events"])
    streamSegmentedControl.frame = CGRectMake(-10,containerView.frame.size.height*0.3,containerView.frame.width+20,40)
    streamSegmentedControl.selectedSegmentIndex = 0
    streamScope = "today"
    streamSegmentedControl.setTitleTextAttributes(segmentedControlFont as [NSObject : AnyObject], forState: .Normal)
    streamSegmentedControl.backgroundColor = UIColor.colorFromClass("background")
    streamSegmentedControl.tintColor = UIColor.colorFromClass("default")


    streamSegmentedControl.addTarget(self, action: "changeStreamScope:", forControlEvents: UIControlEvents.ValueChanged)
    containerView.addSubview(streamTableView)
    containerView.addSubview(streamSegmentedControl)
我没有得到一个错误,但在运行时,我的分段控件消失了。不确定我在这里遗漏了什么,因为我过去只在故事板中做过自动布局

我只希望能够调整分段控件的宽度,所以我假设我只需要一个布局约束


谁能给我指点方向吗?谢谢。

您至少需要添加三个约束。领先、领先和落后。 我在swift方面很弱,但你的约束应该是这样的

let segmentedControlTop = NSLayoutConstraint(item: streamSegmentedControl,
        attribute: .Top,
        relatedBy: .Equal,
        toItem: self.containerView,
        attribute: .Top,
        multiplier: 1.0,
        constant: 0.0)

let segmentedControlLeading = NSLayoutConstraint(item: streamSegmentedControl,
        attribute: .Leading,
        relatedBy: .Equal,
        toItem: self.containerView,
        attribute: .Leading,
        multiplier: 1.0,
        constant: 0.0)

let segmentedControlTrailing = NSLayoutConstraint(item: streamSegmentedControl,
        attribute: .Trailing,
        relatedBy: .Equal,
        toItem: self.containerView,
        attribute: .Trailing,
        multiplier: 1.0,
        constant: 0.0)

containerView.addConstraint(segmentedControlTop)
containerView.addConstraint(segmentedControlLeading)
containerView.addConstraint(segmentedControlTrailing)

如果要保持与superview的5点偏移,请尝试使用5点来使用前导和尾随的常量值。

谢谢。我不确定这是否有什么不同。我得到以下运行时错误:视图层次结构没有为约束做好准备。添加到视图时,约束项必须是该视图(或视图本身)的后代。如果在组装视图层次结构之前需要解决约束,则此操作将崩溃。请确保在添加约束之前在层次结构中添加分段控件谢谢。它被添加到容器视图:containerView.addSubview(streamSegmentedControl)