gpt4 book ai didi

ios - 在自定义 UIView 的 updateConstraint 函数中获取帧大小

转载 作者:行者123 更新时间:2023-11-30 11:29:02 25 4
gpt4 key购买 nike

我正在 UpdateConstraint 函数内的自定义 UIView 中设置 View (UILabelUIImageView)约束,例如以下。如图所示,我正在获取 View 的高度并在自动布局中使用它。我知道我可以在 layoutSubviews 函数中获取帧大小。如果我在 layoutSubViews 中调用 updateConstraint() 函数,一切正常,但我不知道这是否是最好的方法。

此外,当我尝试使用 label.frame = CGRect.. (没有自动布局)在 layoutSubViews() 中设置框架时,没有任何反应,我看不到 super View 中的自定义 View 。

    override func updateConstraints() {
logoImage.anchor(self.topAnchor, left: self.leftAnchor, bottom: self.bottomAnchor, right: self.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: self.frame.height / 2, rightConstant: 0, widthConstant: 0, heightConstant: 0)
label.anchor(self.logoImage.bottomAnchor, left: self.leftAnchor, bottom: nil, right: self.rightAnchor, topConstant: 12, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0)
super.updateConstraints()

}
override func layoutSubviews() {
print(self.frame.height)
updateConstraints()
}

我搜索了以下帖子,但找不到任何解决方案;

Where to get frame size of custom UIView in its subclass

Subview of Custom UIView has wrong x frame position

最佳答案

不需要在 layoutSubviews 中处理这个问题如果您当前的约束创建扩展集 isActive = true那么它将有正确的框架

//

创建自定义 View 的正确方法

class CustomView : UIView {

var imageV = UIImageView()

var once = true

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

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

// set constraints here

self.addSubview(imageV)

}

override func layoutSubviews() {

if once {

self.imageV.translatesAutoresizingMaskIntoConstraints = false

self.imageV.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
self.imageV.trailingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
self.imageV.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
self.imageV.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true

once = false

}

}
}

关于ios - 在自定义 UIView 的 updateConstraint 函数中获取帧大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50448470/

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