gpt4 book ai didi

ios - 使用 Swift 向 ViewController 添加约束

转载 作者:行者123 更新时间:2023-11-28 12:18:14 24 4
gpt4 key购买 nike

我想将container View 添加到主视图(rootViewController.view),但下面给出了异常(exception)。我知道约束,但无法找出原因。

import UIKit

class rootViewController : UIViewController {

init() {
super.init(nibName: nil, bundle: nil)
setupLoginView()
}

func setupLoginView() {

// User ID label
let userIDLabel:UILabel = UILabel()
userIDLabel.text = "User ID"

// Password label
let passwordLabel:UILabel = UILabel()
passwordLabel.text = "Password"

// User ID text
let userIDText:UITextField = UITextField()

// Password text
let passwordText:UITextField = UITextField()

// Login button
let loginBtn:UIButton = UIButton()
loginBtn.setTitle("Login", for: .normal)

// Container view
let container:UIView = UIView()

container.addSubview(userIDLabel)
container.addSubview(userIDText)
container.addSubview(passwordLabel)
container.addSubview(passwordText)
container.addSubview(loginBtn)

view.addSubview(container)

// Add constraints
let heightConstraint = NSLayoutConstraint(item: container, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 300)
let widthConstraint = NSLayoutConstraint(item: container, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 200)
let centerXConstraint = NSLayoutConstraint(item: container, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1, constant: 0)
let centerYConstraint = NSLayoutConstraint(item: container, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1, constant: 0)

container.addConstraint(heightConstraint)
container.addConstraint(widthConstraint)
container.addConstraint(centerXConstraint)
container.addConstraint(centerYConstraint)

}

}

给出以下异常,并提示“约束是否引用了 View 子树之外的内容?这是非法的”

'NSGenericException', reason: 'Unable to install constraint on view. Does the constraint reference something from outside the subtree of the view? That's illegal. constraint: NSLayoutConstraint:0x170089830 UIView:0x12de138c0.centerX == UIView:0x12de0e650.centerX (active)>

最佳答案

将添加中心约束的代码替换为以下行:

view.addConstraint(centerXConstraint)
view.addConstraint(centerYConstraint)

您不能在 container 上添加对其父 View 的引用的约束。

并将 setupLoginView() 移动到 viewDidLoad 而不是 init()

不要忘记删除控制台中的警告以将所有创建的 View (容器、标签、按钮和 TextView )的 translatesAutoresizingMaskIntoConstraints 设置为 false

关于ios - 使用 Swift 向 ViewController 添加约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45710489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com