gpt4 book ai didi

ios - 制作一个自定义的 UIView subview 来填充它的 super View

转载 作者:IT王子 更新时间:2023-10-29 05:39:27 26 4
gpt4 key购买 nike

所以我用自己的初始化程序编写了自己的自定义 View 。但是,当我的主视图加载时,我的自定义 View 以错误的方式描绘。它以 600x600 的矩形为边界,而 superview 为 375x607。我确实尝试过自动约束,似乎不起作用。我试图在 subview 初始化中以编程方式执行此操作,但每当我尝试将其 bounds 属性初始化为其父 View 边界时,我在父 View 中得到 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()
}

我尝试了互联网上的所有方法来使 subview 填充其父 View ,但我认为 subview 在父 View 之前被初始化?那可能吗 ?在 ViewController 中,将我的自定义 View 声明为 Outlet 连接。我确信这个问题应该非常简单,而且我不知道 Swift 初始化 View 的方式。

有什么想法吗?

谢谢。

最佳答案

首先,Views 初始化方法不是执行布局的最佳位置。 View 可以在以后调整大小,如果 View 是从 Xib 加载的,或者您是在 View Controller viewDidLoad 函数中创建的,通常都是这种情况。

也就是说你有几种方法:

1。使用自动布局

界面生成器

这可以在 Interface Builder 中或以编程方式完成。在 Interface Builder 中,您只需使用“固定”选项并选择 View 的所有边

Pin Constraints

完成此操作后,您应该能够在尺寸检查器中看到您的约束,如下所示:

Size Inspector

程序化

或者,您始终可以在初始化程序中以编程方式添加约束:

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-|", options: .allZeros, metrics: nil, views: viewsDict))
addSubview(view)
}

convenience required init(coder aDecoder: NSCoder) {
self.init(frame: .zero)
}

2。手动布局

调整蒙版大小

为此,您可以使用调整大小的 mask ,也可以在 layoutSubviews 中控制框架。调整掩码告诉系统应该如何相对于父 View 调整 View 的大小:

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)
}

布局 subview

最后,您可以覆盖 layoutSubviews 并从那里开始:

override func layoutSubviews() {
super.layoutSubviews()
view.frame = bounds
}

关于ios - 制作一个自定义的 UIView subview 来填充它的 super View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29763818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com