我在storyboard编辑器中添加了UILabel(amountLabel)UIViewController.然后在swift文件中viewDidLoad,我以编程方式创建UITextField(paymentTextField)并尝试在amountLabel和之间添加约束paymentTextField.这是我的代码viewDidload:
let paymentTextField = UITextField()
paymentTextField.translatesAutoresizingMaskIntoConstraints = false
paymentTextField.frame = CGRectMake(15, 100, CGRectGetWidth(self.view.frame) - 30, 44)
self.view.addSubview(paymentTextField)
let bottonConstraint = NSLayoutConstraint(item: paymentTextField, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: self.amountLabel , attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 30)
bottonConstraint.identifier = "paymentTextFieldSpacing"
NSLayoutConstraint.activateConstraints([bottonConstraint])
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
"由于未捕获的异常'NSGenericException'终止应用程序,原因:'无法激活带有项的约束>和>因为它们没有共同的祖先.约束是否引用不同视图层次结构中的项目?这是非法的."
有谁知道什么是错的?amountLabel直接拖到故事板中的视图,并以编程方式将"paymentTextField"添加到同一视图.为什么他们没有共同的祖先?
Jam*_*mil 120
我遇到了你之前描述的同样的问题.为了制作程序化子视图(在您的情况下为paymentTextField),您必须先将其添加到子视图中,然后应用约束.
通过首先添加子视图来查看,这可以确保两个视图具有相同的父视图.
很晚,但希望这可以帮助其他人.
Pau*_*uls 11
该错误表明"因为它们没有共同的祖先",这意味着它们不共享同一个父级.为了关联两个项目之间的约束,它们必须具有子父关系或兄弟关系.
在您的情况下,只需确保它们具有相同的父视图,然后以编程方式添加约束.
小智 5
确保已将添加paymentTextField到视图:
paymentTextField.translatesAutoResizingMaskIntoConstraints = false
view.addSubview(paymentTextField)
...
Run Code Online (Sandbox Code Playgroud)
添加约束,例如 paymentTextField.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
| 归档时间: |
|
| 查看次数: |
22979 次 |
| 最近记录: |