如何在没有 IBOutlet 或标识符的情况下从 Storyboard 更新约束?
Posted
技术标签:
【中文标题】如何在没有 IBOutlet 或标识符的情况下从 Storyboard 更新约束?【英文标题】:How do I update a constraint from the Storyboard without an IBOutlet or Identifier? 【发布时间】:2017-12-22 05:13:04 【问题描述】:我在情节提要中创建了很多视图,但我希望它们能够动态更新其约束,而不必每次都使用 IBOutlet。
我首先为要更新的视图的父视图创建一个自定义类,然后像这样更改其子视图的底部约束:
myView.constraints.filter $0.firstAnchor is NSLayoutAttribute.bottom .constant -= 200
'NSLayoutAttribute.bottom' 似乎不是检查 Anchor 类型的正确方法。
如何检查要更改的约束类型?
我是否正确更新了我想要更改的视图的超级视图中的约束,而不是视图本身?
【问题讨论】:
为什么需要更新约束?有什么特殊要求吗? 更新后的约束将动态地将视图移出键盘;我希望这是一个自定义类,这样我就不必为每个不需要自定义实现的视图重写相同的功能 不更新约束,而是设置视图框架并使用uiview.animation
进行动画。 Refer here
【参考方案1】:
ios7 中的NSLayoutConstraint
有一个名为identifier
的属性,您可以通过代码或IB 设置此属性。
之后,要获得您正在寻找的约束,只需在特定视图中搜索它即可。
考虑这个UIView
扩展:
func constraint(withIdentifier:String) -> NSLayoutConstraint?
return constraints.filter $0.identifier == withIdentifier .first
【讨论】:
对,但我想避免为我想要此功能的所有视图创建标识符。有没有办法按约束类型搜索? 是的,检查这个答案***.com/questions/26833641/… 还有这个项目来自 Erica Sadun 在 GitHub github.com/erica/Auto-Layout-Demystified/tree/master/2ndEdition/…【参考方案2】:根据 dahlia_boy 的建议,我使用 UIView.animate 来实现此功能,但它似乎不是永久性的:
translatesAutoresizingMaskIntoConstraints = true
UIView.animate(withDuration: 1, animations:
self.frame.size.height -= 200
)
【讨论】:
以上是关于如何在没有 IBOutlet 或标识符的情况下从 Storyboard 更新约束?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有用户身份验证的情况下从 Spotify 或任何其他 API 获取歌曲预览
如何在没有 numpy 或 pandas 的情况下从文本文件计算平均值
如何在有或没有 SIMD 内在函数的情况下从 Zig 构建和链接到 CGLM