微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用笔尖加载自定义视图会导致约束被删除

如何解决用笔尖加载自定义视图会导致约束被删除

概述
我创建了一个自定义视图类和一个关联的笔尖。当我尝试将其加载到另一个视图控制器中时,它会加载它,但约束已删除

我发现的东西
在将其标记为重复之前... ,我在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]
        }

}

enter image description here

这是我得到的输出

enter image description here

当然,这不是我想要的。

问题
如何在不弄乱我的约束的情况下从另一个视图控制器加载自定义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 举报,一经查实,本站将立刻删除。