gpt4 book ai didi

swift - 我可以从 uiview 的初始化到它的 superview 创建约束吗

转载 作者:行者123 更新时间:2023-11-28 13:35:56 24 4
gpt4 key购买 nike

我创建了很多 View ,这不是问题。但是我在 VC 中有很多更改约束代码需要重构。

问题:

我如何(如果可能)在 subView 本身的 init 方法中设置约束,以便我可以从 VC 中重构代码。

我想不出另一种方式来为谷歌提出我的问题,所以这是我得到的:

风险投资

    func addCheckView() {
let checkView = CheckView()
checkView.frame = self.view.frame
view.insertSubview(checkView, aboveSubview: mapView)
}
import UIKit

class CheckView: UIView {

override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}


private func commonInit() {
backgroundColor = .blue
// addSubview(self)
translatesAutoresizingMaskIntoConstraints = false
// let margins = layoutMarginsGuide
leadingAnchor.constraint(equalTo: leadingAnchor, constant: 40).isActive = true
trailingAnchor.constraint(equalTo: trailingAnchor, constant: -40).isActive = true
topAnchor.constraint(equalTo: topAnchor, constant: 40).isActive = true
bottomAnchor.constraint(equalTo: bottomAnchor, constant: -40).isActive = true
// layoutIfNeeded()
}
}

我尝试了很多变体,但为了保持简短和可读性(而且我认为解决方案非常简单),我将保留它。

显然,我可以简单地做这样的事情并通过触摸:

private func commonInit() {
let view = CheckView()
// add constraints here, etc.
}

这行得通,但这不只是在 subview 中添加 subview 吗?这看起来既不雅又冗长。

最佳答案

拥有父 View 之前,您不能将 View 限制到它的父 View 。但是 init 发生在父 View 之前,所以你不能将你的约束代码移到它里面。相反,在您的 UIView 子类中,实现 didMoveToSuperview()。现在第一次 self.superview 不是 nil 并且 View 可以将自己约束到它的父 View 。

关于swift - 我可以从 uiview 的初始化到它的 superview 创建约束吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56633646/

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