gpt4 book ai didi

ios - 仅使用约束初始化自定义 UIView (IOS)

转载 作者:行者123 更新时间:2023-11-28 16:01:04 27 4
gpt4 key购买 nike

我被指示创建一个井字游戏。

要求是:

  1. 仅使用 MVC
  2. 以编程方式显示 View
  3. 仅使用约束设置方 block 的大小

因此,我创建了一个 Board 类和一个 Square 类。 board 类几乎只是一个带有背景颜色的 UIView。我的主要问题在初始化。每次我使用自定义 UIView 时,我都必须使用 CGRect 框架进行初始化。讲师告诉我们不要直接使用 CGRect 函数设置 View 的框架,而只能使用约束。

这就是问题所在。我正在尝试在另一个 View 中初始化一个板。因为该板是 UIView 的子类,所以我必须设置框架。

如何将 UIView 初始化为没有框架,以便您只能使用传入参数中的 UIView 约束来设置它的大小?

下面是我现在正在做的。我想在没有 frame 参数的情况下初始化它,但这是必需的。我想初始化这个类并在另一个 viewcontroller 类的 viewDidLoad 函数中使用它。我想传入一个 UIView 作为参数,并根据该特定 View 调整约束。

class Board: UIView {
init(frame: CGRect, view: UIView) {
super.init(frame: frame)
self.backgroundColor = .green
self.translatesAutoresizingMaskIntoConstraints = false
addConstraints(view: view)
}

func addConstraints(view:UIView){
NSLayoutConstraint(item: view,
attribute: .leading,
relatedBy: .equal,
toItem: view,
attribute: .leading,
multiplier: 1,
constant: 0).isActive = true
NSLayoutConstraint(item: view,
attribute: .trailing,
relatedBy: .equal,
toItem: view,
attribute: .trailing,
multiplier: 1,
constant: 0).isActive = true

NSLayoutConstraint(item: view,
attribute: .height,
relatedBy: .equal,
toItem: view,
attribute: .height,
multiplier: 1,
constant: 0).isActive = true
NSLayoutConstraint(item: view,
attribute: .width,
relatedBy: .equal,
toItem: view,
attribute: .width,
multiplier: 1,
constant: 0).isActive = true
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

当我创建板类时,我想将约束设置为我在初始化类时作为参数传入的 view。令人沮丧的是,它不会生效,因为我必须使用所需的帧初始化器。

有什么办法解决这个问题吗?

最佳答案

您可以使用默认框架进行初始化。当您应用约束时,约束将覆盖您设置的原始框架。

class CustomView: UIView {
init(frame: CGRect, otherParam: Int) {
super.init(frame: frame) // Init with in case there are no constraints

setup()
}
}

class CustomView: UIView {
init(otherParam: Int) {
let frame = CGRect(x: 0, y:0, width: 100, height: 100)
super.init(frame: frame) // Init with a default frame

setup()
}
}

关于ios - 仅使用约束初始化自定义 UIView (IOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41080456/

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