我是新手,我写了一个继承自StackView
的customView,我以编程方式创建了一个button
,几乎没有属性,将其添加到自定义视图时,我遇到两个问题:< / p>
addArrangedSubview(myBtn)
,则视图将忽略那些
我添加并填充整个宽度。但是,如果我使用addSubView(myBtn)
,
可以(44x44的蓝色正方形)addArrangedSubview(myBtn)
,则addTarget()
无效,并且
myBtn
无法点击,但是当我使用addSubView(myBtn)
时,它可以工作
完美。这是我的自定义视图类:
import UIKit
class RatingControl: UIStackView {
//MARK: Initialization
override init(frame: CGRect) {
super.init(frame: frame)
setupButtons()
}
required init(coder: NSCoder) {
super.init(coder:coder)
setupButtons()
}
//MARK: Private Methods
private func setupButtons() {
// Create the button
let button = UIButton()
button.backgroundColor = UIColor.blue
// Add constraints
button.translatesAutoresizingMaskIntoConstraints = false
button.heightAnchor.constraint(equalToConstant: 44.0).isActive = true
button.widthAnchor.constraint(equalToConstant: 44.0).isActive = true
// Setup the button action
button.addTarget(self, action: #selector(ratingButtonTapped(_:)), for: .touchUpInside)
// Add the button to the stack
addArrangedSubview(button)
}
//MARK: Button Action
@objc func ratingButtonTapped(_ sender: Any) {
print("Button pressed ")
}
}
以下是预览:
addSubView()
和addArrangedSubview()
有什么区别?为什么这些问题会发生?
答案 0 :(得分:1)
我假设您想水平添加几个按钮(例如,使用典型的“星级”评分控件)。
一个UIStackView
,可能是根据其.addArrangedSubview()
的{{1}}方法, 安排 的子视图而推测出来的, .axis
,.alignment
和.distribution
属性及其.spacing
。
因此,请阅读有关frame
及其用法的一些信息。最有可能的是,您当前正在使用以下方法限制自定义视图:
因此,将按钮添加为UIStackView
会导致其拉伸到堆栈视图的宽度,因为这是默认设置。
将其添加为arrangedSubView
只是将按钮叠加在堆栈视图上,而不是允许堆栈视图对其进行排列,因此堆栈视图的高度可能为零-因此无法轻按按钮
在添加自定义堆栈视图时,尝试设置仅顶部和前导约束。这应该为您提供一个可以轻按的subview
按钮。
使用44 x 44
添加更多按钮时,这些按钮将水平排列,这可能是您想要的。