当前位置: 首页 > 知识库问答 >
问题:

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

东郭赞
2023-03-14

我有一个以编程方式定义的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)

我的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)

我没有出错,但是在运行时,我的分段控件消失了。不确定我在这里错过了什么,因为我过去只在故事板中做过自动布局。

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

谁能告诉我一些方向吗?谢谢

共有1个答案

傅玮
2023-03-14

您至少需要添加三个约束。前导、顶部和尾部。我在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点使用前导和尾随的常量值。

 类似资料:
  • 我试图添加一个UISegmentedControl到UIToolbar使用IB在xCode。 虽然使用xib文件很容易(创建视图,在屏幕底部添加工具栏,并将UISegmentedControl拖到工具栏上),但使用故事板似乎“不可能”。 我在UINavigationController中嵌入了一个UIViewController场景。。。 我在NavigationController上有以下设置.

  • 首先要澄清的是,我不是在问如何修改单个UISegmentedControl段或按钮的宽度。 我的最终目标是创建嵌入在UIScrollView中的UISegmentedControl。此UISegmentedControl将能够无限期地增加其段数。 为了实现这一点,每次添加一个段时,我都需要增加本身的总宽度。有没有什么方法可以在每次添加段时不重新创建全新的对象的情况下增加总宽度? 提前谢谢你!

  • 我得到了在地图上绘制一些点的任务。写了一些代码,但目前我通过形状创建的每个点都将被添加到网格内的错误位置。哦,我正在使用JavaFX。 我在GridPane的索引0,0中添加了一个ImageView,每个点都是通过MouseEvent在ImageView上的x和y位置创建的。之后,我将创建的点添加为GridPane的子节点,它显示在第一个网格的y轴中心。尝试了不同的东西,如anchorPanes和

  • UISegmentedControl似乎增加了一些额外的高度。我创建了一个UIView(绿色)和一个UISegmentedControl,其中我将两者的高度限制设置为56。它们应该显示相同的高度,但高度似乎略有不同。结果在模拟器中 以下是IB的约束。约束

  • 我使用的是MGSplitViewClass(链接),我很难正确设置UICollectionView的大小。在上述拆分视图中,我在主视图中有一组四个UIView,其中包含更健壮的视图(表视图、标签组和集合视图)。 首先,我尝试在nib中添加UICollectionView,并通过编程创建了一个集合视图控制器,并将其连接到nib的集合视图。我一试collectionViewController,这就失

  • 我试图实现一个评级系统,接收用户提交的信息。但我只是想知道是否有可能在一个模型文件中有两个类,并得到 在我的模型文件中,我有 顺便说一下,stars是一个html文件。有什么想法吗? 这是我的观点, 我的错误信息很简单, 无法导入myapp.comments.views.stars。模块myapp.comments.views中不存在视图。 我的回溯是, 环境:请求方法:获取 Django版本:1