ios – 制作一个自定义的UIView子视图,填充其超级视图

ios – 制作一个自定义的UIView子视图,填充其超级视图,第1张

概述所以我用自己的初始化程序编写了自己的自定义视图.但是,当我的主视图加载我的自定义视图时,会以错误的方式进行描述.它的边界为600×600矩形,而superview为375×607.我确实试图把自动约束,似乎没有工作.我尝试在子视图初始化中以编程方式执行此 *** 作,但每当我尝试将其bounds属性初始化为其superview边界时,我在superview中得到nil. override init(fra 所以我用自己的初始化程序编写了自己的自定义视图.但是,当我的主视图加载我的自定义视图时,会以错误的方式进行描述.它的边界为600×600矩形,而supervIEw为375×607.我确实试图把自动约束,似乎没有工作.我尝试在子视图初始化中以编程方式执行此 *** 作,但每当我尝试将其bounds属性初始化为其supervIEw边界时,我在supervIEw中得到nil.
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子视图,填充其超级视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1109220.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存