2016-03-08 74 views
0

我正在使用创建UIViewControllers及其特定控件的框架。我无法访问其故事板以手动修改它。有没有办法在视图中添加类似标签的内容并将其正确放置,即使视图已配置了自动布局功能?如何将子视图(如标签)添加到已有子视图的UIViewController的主视图?

现有的UIViewController有一个视图,在屏幕底部有一个标签,一个文本框和一个按钮。我想在文本框下添加另一个标签。我如何去做这样的事情?

我试着使用:

view.insertSubview(label, belowSubview: textField) 

但标签的左上角结束了,这不是视图的自动布局的一部分(即当我改变屏幕尺寸,现有的控制做正确的事情,只有我的标签迷路了)。

+0

您是否正确设置了要添加的视图的x:y坐标?请注意,上面的插入是关于z顺序的,而不是x:y的位置。 – Verticon

回答

0

似乎标签位置不正确,因为它没有任何约束。

你可以试试下面的代码吗?

label.translatesAutoresizingMaskIntoConstraints = false 
    let topConstraint = NSLayoutConstraint(item: label, attribute: .Top, relatedBy: .Equal, toItem: textField, attribute: .Top, multiplier: 1.0, constant: 0.0) 
    let leftConstraint = NSLayoutConstraint(item: label, attribute: .Left, relatedBy: .Equal, toItem: textField, attribute: .Left, multiplier: 1.0, constant: 0.0) 
    let bottomConstraint = NSLayoutConstraint(item: label, attribute: .Bottom, relatedBy: .Equal, toItem: textField, attribute: .Bottom, multiplier: 1.0, constant: 0.0) 
    let rightConstraint = NSLayoutConstraint(item: label, attribute: .Right, relatedBy: .Equal, toItem: textField, attribute: .Right, multiplier: 1.0, constant: 0.0) 
    self.view.insertSubview(label, belowSubview: textField) 
    NSLayoutConstraint.activateConstraints([topConstraint, leftConstraint, bottomConstraint, rightConstraint]) 
0

没有什么能阻止你添加一个新的视图来查看层次结构,并使用AutoLayout将它的位置绑定到一个现有的视图。您当然必须有权访问该现有视图。

我们可以假定原始的视图层次结构不受约束/限制,所以你不应该太担心你的视图搞砸了。

你基本上需要限制

  1. 大小仅适用于该视图的约束,然后
  2. 这是很容易的视图的位置这将是相对于任何视图您从现有视图层次结构中选择。
0

below in insertSubview(belowSubview:)指的是z轴定位,而不是y轴定位。既然你没有给标签定位,它默认为0,0。这听起来像你正在使用自动布局,所以你需要给出适当的限制:

view.addSubview(label) 
view.addConstraint(NSLayoutConstraint(item: label, attribute: .Top, relatedBy: .Equal, toItem: textView, attribute: .Bottom, multiplier: 1.0, constant: 8.0)) 
view.addConstraint(NSLayoutConstraint(item: label, attribute: .Left, relatedBy: .Equal, toItem: textView, attribute: .Left, multiplier: 1.0, constant: 0.0)) 
view.addConstraint(NSLayoutConstraint(item: label, attribute: .Right, relatedBy: .Equal, toItem: textView, attribute: .Right, multiplier: 1.0, constant: 0.0)) 
相关问题