ios - 表达式类型“NSLayoutConstraint”在没有更多上下文的情况下是模棱两可的
问题描述
当我尝试构建我的 iOS 应用程序时,我收到以下错误。我怎样才能找出是什么原因造成的?
错误:表达式类型“NSLayoutConstraint”在没有更多上下文的情况下不明确
代码:
private func centerIndicator() {
let xCenterConstraint = NSLayoutConstraint(
item: loadingView ?? default value, attribute: .centerX, relatedBy: .equal,
toItem: indicator, attribute: .centerX, multiplier: 1, constant: 0
)
loadingView.addConstraint(xCenterConstraint)
let yCenterConstraint = NSLayoutConstraint(
item: loadingView, attribute: .centerY, relatedBy: .equal,
toItem: indicator, attribute: .centerY, multiplier: 1, constant: 0
)
loadingView.addConstraint(yCenterConstraint)
}
解决方案
你最可能的罪魁祸首是default value
,它不应该在那里。如果loadingView
是非可选的,您可以删除?? default value
. 如果它是可选的,那么您可能应该将其包装在一个if let loadingView = loadingView
块中。对随机视图设置约束是行不通的。
接下来,Apple 不再建议直接向视图添加约束。相反,使用该isActive
属性。
NSLayoutConstraint(
item: loadingView, attribute: .centerY, relatedBy: .equal,
toItem: indicator, attribute: .centerY, multiplier: 1, constant: 0
).isActive = true
但这些都是非常简单的约束。更好的方法是使用布局锚点。
loadingView.centerYAnchor.constraint(equalTo: indicator.centerYAnchor).isActive = true
推荐阅读
- python - Py2neo:如何正确使用 graph.run?
- scala - 对于 KeyedState,KeyBy None
- javascript - javascript游戏的重启按钮
- python - Python在列中将txt写入csv
- html - 基于高度和宽度的引导响应菜单
- javascript - 在 htm 烧瓶中启用或禁用从一页到另一页的按钮
- java - Bean 属性“dipartmantId”不可读或具有无效的 getter 方法:
- svg - 如何使用部分样式属性通过“select-by-selector”选择元素?
- rust - Rust cargo.toml 为 C 链接器和编译器指定自定义路径
- python - TensorFlow 导入错误,无法从部分初始化模块导入模块 pywrap_tensorflow