我不是@IBDesignable
的忠实拥护者,但是在试用它时,我发现如果您在prepareForInterfaceBuilder
中添加一个子视图,则会添加该子视图,但是不会遵守您对其应用的约束。
这是prepareForInterfaceBuilder
的已知限制吗?那是有道理的;我认为该方法应仅限于做一些事情,例如给标签提供一些伪文本。
最佳答案
确保在prepareForInterfaceBuilder
中添加子视图时,如果要对其使用约束并使其在Interface Builder中正确显示,则将其translatesAutoresizingMaskIntoConstraints
属性设置为false
。如:
@IBDesignable class View: UIView {
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
let subview = UIView()
// Make sure to set this to false!
subview.translatesAutoresizingMaskIntoConstraints = false
// Just setting the background color so it can be seen in IB.
subview.backgroundColor = .blue
// Must add it as a subview before activating any constraints.
addSubview(subview)
// Adding some example constraints with some padding to make sure they're behaving properly.
NSLayoutConstraint.activate(
[subview.topAnchor.constraint(equalTo: topAnchor, constant: 20),
subview.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20),
subview.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -20),
subview.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -20)]
)
}
}
这是一个容易犯的错误,因为Xcode(在撰写此答案时为10.3)不会为您提供有关
IBDesignable
渲染期间布局引擎发生的任何反馈(没有控制台日志消息,Interface Builder中没有错误,并且Report中没有任何内容)航海家)。关于ios - 在prepareForInterfaceBuilder中的约束?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57155279/