我正在开发一个小应用程序,我想在键盘扩展中实现一个视图,如下图所示:
现在我的应用程序如下所示:
我想实现顶部和底部按钮的约束,但是我遇到了问题,因为尽管增加了键盘上方的空间高度,但由于按钮也会增加其高度,它仍会产生垂直滚动:
我的实际代码是:
class CatboardBanner: ExtraView {
var scrollView = UIScrollView()
var stack = UIStackView()
let button = UIButton()
let button2 = UIButton()
let button3 = UIButton()
let button4 = UIButton()
let button5 = UIButton()
required init(globalColors: GlobalColors.Type?, darkMode: Bool, solidColorMode: Bool) {
super.init(globalColors: globalColors, darkMode: darkMode, solidColorMode: solidColorMode)
self.backgroundColor = UIColor.white.withAlphaComponent(0.01)
self.addSubview(scrollView)
self.scrollView.translatesAutoresizingMaskIntoConstraints = false
self.scrollView.addSubview(self.stack)
self.stack.translatesAutoresizingMaskIntoConstraints = false
self.stack.axis = .horizontal
self.stack.spacing = 10
button.setTitle("btn 1", for: .normal)
button.backgroundColor = UIColor.red
button.roundedCorners(rounding: 5)
button.translatesAutoresizingMaskIntoConstraints = false
button2.setTitle("btn 2", for: .normal)
button2.backgroundColor = UIColor.gray
button2.roundedCorners(rounding: 5)
button2.translatesAutoresizingMaskIntoConstraints = false
button3.setTitle("btn 3", for: .normal)
button3.backgroundColor = UIColor.brown
button3.roundedCorners(rounding: 5)
button3.translatesAutoresizingMaskIntoConstraints = false
button4.setTitle("btn 4", for: .normal)
button4.backgroundColor = UIColor.yellow
button4.roundedCorners(rounding: 5)
button4.translatesAutoresizingMaskIntoConstraints = false
button5.setTitle("btn 5", for: .normal)
button5.backgroundColor = UIColor.yellow
button4.roundedCorners(rounding: 5)
button5.translatesAutoresizingMaskIntoConstraints = false
self.stack.addArrangedSubview(button)
self.stack.addArrangedSubview(button2)
self.stack.addArrangedSubview(button3)
self.stack.addArrangedSubview(button4)
self.stack.addArrangedSubview(button5)
self.updateAppearance()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func setNeedsLayout() {
super.setNeedsLayout()
}
override func layoutSubviews() {
super.layoutSubviews()
self.scrollView.showsHorizontalScrollIndicator = false
self.scrollView.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 0).isActive = true;
self.scrollView.topAnchor.constraint(equalTo: self.topAnchor, constant: 0).isActive = true;
self.scrollView.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: 0).isActive = true;
self.scrollView.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0).isActive = true;
self.stack.leadingAnchor.constraint(equalTo: self.scrollView.leadingAnchor).isActive = true
self.stack.topAnchor.constraint(equalTo: self.scrollView.topAnchor).isActive = true
self.stack.trailingAnchor.constraint(equalTo: self.scrollView.trailingAnchor).isActive = true
self.stack.bottomAnchor.constraint(equalTo: self.scrollView.bottomAnchor).isActive = true
self.stack.heightAnchor.constraint(equalTo: self.heightAnchor).isActive = true
let leadingConstraint = NSLayoutConstraint(item: button, attribute: .leading, relatedBy: .equal, toItem: self.stack, attribute: .leading, multiplier: 1, constant: 10)
let widthConstraint = NSLayoutConstraint(item: button, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 100)
let heightConstraint = NSLayoutConstraint(item: button, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 30)
let widthConstraint2 = NSLayoutConstraint(item: button2, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 100)
let heightConstraint2 = NSLayoutConstraint(item: button2, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 30)
let widthConstraint3 = NSLayoutConstraint(item: button3, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 100)
let heightConstraint3 = NSLayoutConstraint(item: button3, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 30)
let widthConstraint4 = NSLayoutConstraint(item: button4, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 100)
let heightConstraint4 = NSLayoutConstraint(item: button4, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 30)
let widthConstraint5 = NSLayoutConstraint(item: button5, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 100)
let heightConstraint5 = NSLayoutConstraint(item: button5, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 30)
NSLayoutConstraint.activate([leadingConstraint, widthConstraint, heightConstraint, widthConstraint2, heightConstraint2, widthConstraint3, heightConstraint3, widthConstraint4, heightConstraint4, widthConstraint5, heightConstraint5])
}
@objc func respondToSwitch() {
}
func updateAppearance() {
}
}
ExtraView是我正在使用的键盘扩展中的视图,高度为50。
我在第三张图片中尝试过的是将scrollView的topAnchor约束更改为8,但不幸的是,它没有奏效。
希望您能帮助我解决这个问题。 谢谢!