Swift 约束和锚点

Posted

技术标签:

【中文标题】Swift 约束和锚点【英文标题】:Swift Constraints & Anchors 【发布时间】:2017-11-29 05:37:32 【问题描述】:

事实上,我一直在寻找下拉按钮的示例。但不幸的是,它并没有完全发挥作用,而且我不太清楚动态约束和锚点是如何工作的。因此,我请求您的帮助。

'NSGenericException',原因:'无法用激活约束 锚点和 因为他们没有 共同祖先。约束或其锚点是否引用了 不同的视图层次结构?这是违法的。

你可以在 Github 上找到我的源代码:https://github.com/Archetapp/Drop-Down-Menu/blob/master/sdafjkbslib/ViewController.swift

我发现了类似的问题,他们的解决方案是:

在激活约束之前检查您是否以编程方式创建的视图添加到其父级。

检查是否在viewDidLoad()/viewWillAppear()里面写了约束激活码。您应该在 updateViewConstraints 或 viewWillLayoutSubviews 中编写约束。

检查是否关闭 translatesAutoresizingMaskIntoConstraints。

但这对我没有帮助。

【问题讨论】:

你需要显示下拉菜单对吗? @GaneshManickam 是的,忘记写了,它显示并工作,当控制器关闭时出现问题(当按钮被方法RemoveFromSuperview调用时) 【参考方案1】:

对于下拉菜单,我最喜欢这个library 更少的代码并且易于处理

初始化

let dropDown = DropDown()

// The view to which the drop down will appear on
dropDown.anchorView = view // UIView or UIBarButtonItem

// The list of items to display. Can be changed dynamically
dropDown.dataSource = ["Car", "Motorcycle", "Truck"]

处理选择

// Action triggered on selection
dropDown.selectionAction =  [unowned self] (index: Int, item: String) in
  print("Selected item: \(item) at index: \(index)")

处理显示和隐藏

dropDown.show()
dropDown.hide()

非常容易定制

希望对你有帮助

【讨论】:

以上是关于Swift 约束和锚点的主要内容,如果未能解决你的问题,请参考以下文章

框架和锚点

LAYABOX轴心点和锚点

React Router 浏览器历史推送和锚点

获取整个 URL,包括查询字符串和锚点

路由跳转中的hash值和锚点冲突

通用控制 - 关于码头和锚点的简单问题