ios - Swift 编程约束不起作用

标签 ios swift xcode

我正在尝试创建一个内部有段控件的 uiview。我希望能够将此 uiview 添加到我的 View Controller 的 View 中。段控件应该就在我的表格 View 的顶部。但每次我设置约束时,我都会收到这个错误
“线程 1:异常:“无法使用 anchor 激活约束,因为它们没有共同的祖先。约束或其 anchor 是否引用不同 View 层次结构中的项目?那是非法的。””我尝试通过首先添加 subview 来解决问题,但它不起作用。如果有人可以帮助我,这是我的代码。

    func configureTableView(){
    setupSegmentControl()
    view.addSubview(tableView)
    
    setTableViewDelegates()
    tableView.rowHeight = 50
    tableView.translatesAutoresizingMaskIntoConstraints = false
    tableView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
    tableView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
    tableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
    self.tableView.topAnchor.constraint(equalToSystemSpacingBelow: self.view.topAnchor, multiplier: 20).isActive = true
    tableView.register(UINib(nibName: "CustomCellNSB2", bundle: nil), forCellReuseIdentifier: "CustomCellNSB2")
}
func setTableViewDelegates(){
    tableView.delegate = self
    tableView.dataSource = self
}
func setupSegmentControl(){

    var headerView = UIView()
    var importanceSegmentControl = CustomSegmentControl()
    headerView.addSubview(importanceSegmentControl)

    self.view.addSubview(headerView)



    importanceSegmentControl.addTarget(self, action: #selector(indexChanged(control:)),for: UIControl.Event.valueChanged)


    headerView.translatesAutoresizingMaskIntoConstraints = false
    headerView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 20).isActive = true
    headerView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -20).isActive = true
    headerView.bottomAnchor.constraint(equalTo: self.tableView.topAnchor, constant: 20).isActive = true
    headerView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 10).isActive = true
    
    importanceSegmentControl.translatesAutoresizingMaskIntoConstraints = false
    importanceSegmentControl.leadingAnchor.constraint(equalTo: headerView.leadingAnchor, constant: 20).isActive = true
    importanceSegmentControl.trailingAnchor.constraint(equalTo: headerView.trailingAnchor, constant: -20).isActive = true
    importanceSegmentControl.bottomAnchor.constraint(equalTo: headerView.topAnchor, constant: 20).isActive = true
    importanceSegmentControl.topAnchor.constraint(equalTo: headerView.topAnchor, constant: 10).isActive = true
}

最佳答案

tableViewimportanceSegmentControl在将约束添加到 importanceSegmentControl 时没有任何共同祖先.所以要解决这个问题,只需切换执行顺序:

func configureTableView(){
    view.addSubview(tableView)
    setupSegmentControl()
    //...
}

关于ios - Swift 编程约束不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62820857/

相关文章:

ios - iOS 搜索的应用程序名称可以与 CFBundleDisplayName 不同吗?

objective-c - iPad 内存限制

android - 想在 Cocos2d 中为我的 SDK 创建一个插件

ios - 如何从 WKWebView 打印特定的 iFrame

ios - UIButton图像大小

ios - 试图从 firebase Swift 获取数据

swift - 为什么下面的协议(protocol)有这个必需的功能?

ios - SWIFT - 加载本地 CSS 文件

ios - 如何在iOS中实现随机决策森林分类

ios - Xcode 字体 : How to know if I need to purchase a license?