如何解决用笔尖加载自定义视图会导致约束被删除
概述
我创建了一个自定义视图类和一个关联的笔尖。当我尝试将其加载到另一个视图控制器中时,它会加载它,但约束已删除。
我发现的东西
在将其标记为重复之前... ,我在StackOverflow上遇到了很多同样的问题,但是很快人们都无法解决或者无法解决。我尝试了一切。
我在做什么
我有一个视图控制器(碰巧是keyboardviewcntroller,但是在常规的控制器上我仍然有问题),它带有一个相关的笔尖和一个自定义的uiView及其相关的笔尖。
- KeyboardViewController:
我与我的键盘视图控制器关联了一个zip文件。他的文件所有者是KeyboardViewController。
在我的KeyboardViewController中,我具有创建键盘目标所获得的基本代码,然后在viewDidLoad
之前添加了自定义视图插座@IBOutlet weak var vieww: Custom!
并且在我的viewDidLoad内部加载了我的笔尖
let nib = UINib(nibName: "nibbb",bundle: nil)
let objects = nib.instantiate(withOwner: self,options: nil)
view = objects[0] as? UIView
- 自定义视图
我的自定义视图也具有关联的笔尖。它的文件所有者是Custom(我的新班级)。在笔尖中,放置了一个按钮和一个标签,如下图所示,并添加了一些约束。
在Custom类中,我输入了以下代码,其中包括出口和该类的初始化。
@IBOutlet weak var label: UILabel!
@IBOutlet weak var button: UIButton!
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit(){
Bundle.main.loadNibNamed("Custom",owner: self,options: nil)
addSubview(label)
label.frame = self.bounds
label.autoresizingMask = [.flexibleHeight,.flexibleWidth]
addSubview(button)
button.frame = self.bounds
button.autoresizingMask = [.flexibleHeight,.flexibleWidth]
}
}
这是我得到的输出:
当然,这不是我想要的。
问题
如何在不弄乱我的约束的情况下从另一个视图控制器加载自定义UIView笔尖?
解决方法
约束无法按预期工作的原因是因为在commonInit函数中将标签和按钮设置为与视图相同的大小。
您应该声明一个UIView属性,然后替换commonInit函数的内容:
var contentView: UIView!
private func commonInit() {
if let nib = Bundle.main.loadNibNamed("Custom",owner: self,options:nil)?.first as? UIView {
contentView = nib
contentView.autoresizingMask = [.flexibleWidth,.flexibleHeight]
contentView.frame = bounds
addSubview(contentView)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。