gpt4 book ai didi

ios - 以编程方式创建的 UIControl 中的自动布局似乎不起作用

转载 作者:行者123 更新时间:2023-11-30 12:43:20 26 4
gpt4 key购买 nike

我创建了一个名为“TestButton”的 UIControl 子类,带有标签和 imageview subview 。该对象是使用框架创建的,作为初始化过程的一部分,我创建了 subview 元素。

这些“测试按钮”是以编程方式创建的,我从未在 Storyboard中使用它们。

代码片段:

class TestButton: UIControl {
var iconImageView: UIImageView?
var labelView: UILabel?

required init(size: CGSize, icon: UIImage? text: String?) {
super.init(frame: CGRect(x: 0, y: 0, width: size.width, height: size.height) )

if ( (icon != nil) && (text != nil) ) {
self.iconImageView = UIImageView()
self.iconImageView?.translatesAutoresizingMaskIntoConstraints = false
self.iconImageView?.contentMode = .center
self.iconImageView?.image = icon
self.iconImageView?.backgroundColor = UIColor.yellow // test: show bounds

self.labelView = UILabel()
self.labelView?.translatesAutoresizingMaskIntoConstraints = false
self.labelView?.text = "Test"
self.labelView?.backgroundColor = UIColor.blue

self.addSubview(self.iconImageView!)
//self.addSubview(self.labelView!)

// Setup constraints on created subview(s)
self.iconImageView?.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
self.iconImageView?.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
self.iconImageView?.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
self.iconImageView?.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
}
}

override func layoutSubviews() {
super.layoutSubviews()
print("iconframe: \(self.iconImageView!.frame)")

}

在上面的示例中,我已从组合中删除了标签。我只是想让 imageView 约束起作用并有效地调整 imageView 的大小以适应 View 。这不起作用,图像显示为全尺寸,并且约束似乎已被忽略。我尝试将约束代码移至 updateConstraints 中并调用它 - 所有这些似乎都有效,但约束再次未应用。

layoutSubviews 确实会在您期望的情况下被调用,但 imageView 框架未修改。输出窗口中没有任何消息,它只是静静地不起作用。

我的问题是;我是否通过指定父级框架以某种方式禁用了自动布局?我希望 autoLayout 仍然在父框架的范围内工作?

很抱歉,如果这个问题之前已经被回答过一次或多次。我实际上不确定我在寻找什么或要问的正确问题,只是在一天的拖网之后才发布。谢谢

最佳答案

TestButton View 的行为将取决于它在其父 View 中的约束方式。

NSLayoutConstraint 中,两个参与属性(或 anchor )都是平等的“伙伴”:只要有这四个约束,imageView 将获取其父级的完整框架( TestButton),但同时TestButton将扩展到足够大以容纳全尺寸图像
您可以对 TestButton View 应用其他约束以防止后者发生。

要了解为什么标准 View 会出现这样的行为,请查看 intrinsicContentSize 属性 ( docs )。它由标准控件实现,并告诉自动布局系统 View 应该有多大,纯粹基于其内容(例如,UIButton 或 UISwitch 就是这样自动调整大小的)。 UIImageView 的 intrinsicContentSize 是其图像的大小,这就是为什么它会在没有任何阻碍的情况下扩展为全尺寸。

关于ios - 以编程方式创建的 UIControl 中的自动布局似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41983434/

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