overrIDe init(frame: CGRect) { super.init(frame: frame) self.setup()}required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.setup()}func setup() { initPathLayer() initHandleVIEw() initHandlePanGestureRecognizer() layoutPathLayer() layoutHandleVIEws()}
我尝试了互联网上的所有内容,使子视图填充其超级视图,但我认为子视图在supervIEw之前被初始化了?那可能吗 ?在VIEwController中,我将自定义视图声明为Outlet连接.我确信这个问题应该非常简单,而且我不知道Swift初始化视图的方式.
有任何想法吗 ?
谢谢.
解决方法 首先,VIEws init方法不是执行布局的最佳位置.视图可以在稍后调整大小,如果从Xib加载视图或者在VIEw Controllers vIEwDIDLoad函数中创建视图,则通常总是这样.话虽如此,你有几种方法:
1.使用自动布局
Interface Builder
这可以在Interface Builder中或以编程方式完成.在Interface Builder中,您只需使用“Pin”选项并选择视图的所有边
完成此 *** 作后,您应该能够在“大小”检查器中看到您的约束,如下所示:
编程
或者,您始终可以在初始化程序中以编程方式添加约束:
overrIDe init(frame: CGRect) { let vIEw = UIVIEw(frame: .zero) vIEw.translatesautoresizingMaskIntoConstraints = false super.init(frame: frame) let vIEwsDict = ["vIEw": vIEw] addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[vIEw]-0-|",options: .allZeros,metrics: nil,vIEws: vIEwsDict)) addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[vIEw]-0-|",vIEws: vIEwsDict)) addSubvIEw(vIEw)}convenIEnce required init(coder aDecoder: NSCoder) { self.init(frame: .zero)}
2.手动布局
调整面具大小
为此,您可以使用调整大小的蒙版,也可以在layoutSubvIEws中控制框架.调整掩码大小会告诉系统视图应如何相对于supervIEw进行调整:
overrIDe init(frame: CGRect) { let vIEw = UIVIEw(frame: CGRectZero) vIEw.translatesautoresizingMaskIntoConstraints = false super.init(frame: frame) vIEw.frame = bounds vIEw.autoresizingMask = [.flexibleWIDth,.flexibleHeight] addSubvIEw(vIEw)}
布局子视图
最后,您可以覆盖layoutSubvIEws并从那里开始:
overrIDe func layoutSubvIEws() { super.layoutSubvIEws() vIEw.frame = bounds}总结
以上是内存溢出为你收集整理的ios – 制作一个自定义的UIView子视图,填充其超级视图全部内容,希望文章能够帮你解决ios – 制作一个自定义的UIView子视图,填充其超级视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)