我正在使用一个框架来创建带有特定控件的UIViewControllers。我无法访问其故事板以手动修改它。有没有办法在视图中添加类似标签的东西并正确定位它,即使视图已经配置了自动布局?
现有的UIViewController有一个带有标签,文本字段和屏幕底部按钮的视图。我想在文本字段下面添加另一个标签。我该怎么做呢?
我尝试使用:
view.insertSubview(label, belowSubview: textField)
但标签最终位于左上角,并且它不属于视图的自动布局(即当我更改屏幕尺寸时,现有控件做正确的事情,只有我的标签获得丢失)。
答案 0 :(得分: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])
答案 1 :(得分:0)
没有什么可以阻止您添加新视图以查看层次结构,并使用AutoLayout将其位置与其中一个现有视图绑定。您当然必须能够访问现有视图。
我们可以假设原始视图层次结构不受限制,因此您不必过于担心视图混乱。
你基本上需要约束
答案 2 :(得分:0)
below
中的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))