ios - 是否可以通过接口生成器从超类更改约束的常量值?
问题描述
在以这种方式设置约束后,我试图缩放约束的值:
@IBDesignable
class ScaledConstraint: NSLayoutConstraint {
@IBInspectable var constantValue: CGFloat = 0 { didSet { constantValueDidSet() } }
func constantValueDidSet() {
super.constant = (constantValue / 320) * UIScreen.main.bounds.width
}
}
但是这种方法迫使我为每个约束更改 IBInspectable 变量。我试图处理它覆盖默认常量值,但它仅在我从代码中设置常量值时才有效,并且当我从界面构建器设置它时不起作用:
override var constant: CGFloat {
set(newValue) {
self.constant = (newValue / 320) * UIScreen.main.bounds.width
}
get {
return self.constant
}
}
有没有办法在没有自定义 IBInspectable 变量的情况下从界面构建器设置常量值后更改常量值?提前致谢!
解决方案
您可以将故事板中的约束输出到您的视图控制器中,类似于您输出 UIView 和其他视图组件的方式,即使获取它自己的输出会更烦人。(这里的答案向您展示了如何做到这一点)。
所以你的一个网点看起来像这样:
@IBOutlet weak var myConstraint: NSLayoutConstraint!
您可以稍后调用:
myConstraint.constant = 100 //Or whatever value you want
之后,您应该确保致电:
view.layoutIfNeed()
推荐阅读
- css - 在更改类名时删除/更改 css 属性,在页面加载时
- woocommerce - 致命错误:未捕获的 WC_Data_Exception:帐单电子邮件地址无效
- node.js - 如果在开发模式下运行,节点 Vue.js 不同的代码场景
- apache-kafka - 最佳实践 - 发布 Kafka Stream 应用程序
- php - 未找到 PHPUnit 类,即使它已定义
- javascript - 为多个下拉选择呈现标签
- typescript - 创建对象时如何为键编写类型?
- react-native - expo-image-picker 不处理网络浏览器中的取消事件?
- python - 无法正确处理 dict
- node.js - 如何修复“无法编译 Node.js 应用程序”?