gpt4 book ai didi

ios - 在自定义 UIView 中的何处添加自动布局约束代码

转载 作者:IT王子 更新时间:2023-10-29 05:06:38 24 4
gpt4 key购买 nike

我经常看到在 UIViewController 中添加自动布局约束,但对我来说,这似乎是布局逻辑的错误位置。

是否可以在自定义 UIView 中添加 NSLayoutConstraint

UIView 中的哪个位置才是以编程方式添加它们的正确位置?

最佳答案

是否可以在自定义 UIView 中添加 NSLayoutConstraints?

是的,可以在自定义 View 中添加约束,组织在这里非常重要,特别是如果您想为自定义 View 的某些部分设置动画。

阅读 Apple 的子类化部分 UIView Reference document

Constraints:

requiresConstraintBasedLayout - Implement this class method if your view class requires constraints to work properly.

updateConstraints - Implement this method if your view needs to create custom constraints between your subviews.

alignmentRectForFrame:, frameForAlignmentRect: - Implement these methods to override how your views are aligned to other views.

在 UIView 中的哪个位置才是以编程方式添加它们的正确位置?

这是一个自定义类的骨架大纲。关键问题是你集中了你的约束,否则你添加的约束越多,类就会变得非常困惑。您还可以在 updateConstraints() 方法中引入其他设置,并通过设置配置值有条件地添加或删除约束,然后调用 setNeedsUpdateConstraints()。

您决定要设置动画的任何约束都应该是实例变量。

希望这有帮助:)

class MyCustomView: UIView {

private var didSetupConstraints = false
private let myLabel = UILabel(frame: CGRectZero)

// MARK: Lifecycle
override init(frame: CGRect) {
super.init(frame: CGRectZero)
self.setup()
}

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


// Mark: - Setup
private func setup() {

// 1. Setup the properties of the view it's self
self.translatesAutoresizingMaskIntoConstraints = false
backgroundColor = UIColor.orangeColor()
clipsToBounds = true

// 2. Setup your subviews
setupMyLabel()

// 3. Inform the contraints engine to update the constraints
self.setNeedsUpdateConstraints()
}


private func setupMyLabel() {

myLabel.translatesAutoresizingMaskIntoConstraints = false

}


override func updateConstraints() {

if didSetupConstraints == false {
addConstraintsForMyLabel()
}

super.updateConstraints() //Documentation note: Call [super updateConstraints] as the final step in your implementation.
}

private func addConstraintsForMyLabel() {

// Add your constraints here
}

}

关于ios - 在自定义 UIView 中的何处添加自动布局约束代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34295577/

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