Swift: 设置按钮的高度和宽度没有效果

Swift: Setting the height and width of buttons has no effect

我有这个 tabBar,以编程方式创建:

func createTabBar() {
       var arrangedSubviews = [UIView]()
       if let menus = CMSessionManager.sharedInstance.menus {
           for menu_item in menus {
               if let menuInfoDetails = menu_item as? [String: Any] {
                   let tabButton = CustomButton(color: .red, titleString: menuInfoDetails["label"] as! String)
                   // This apparently has no effect on button size
                   tabButton.frame = CGRect(x: 100, y: 100, width: 100, height: 50)
                   arrangedSubviews.append(tabButton)
               }
           }
           stackView.alignment = .leading
           stackView = UIStackView(arrangedSubviews: arrangedSubviews)
           stackView.translatesAutoresizingMaskIntoConstraints = false
           stackView.distribution = .fillProportionally
           stackView.axis = .horizontal
           stackView.spacing = 8
           self.view.addSubview(stackView)
           stackView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 24).isActive = true
           stackView.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 0).isActive = true
           stackView.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: 0).isActive = true
       }
   }
   

我一直在尝试以编程方式更改按钮大小:

tabButton.frame = CGRect(x: 100, y: 100, width: 100, height: 50)

无论我设置哪个高度或宽度,或 x y 位置,都没有改变。
知道出了什么问题吗?

不直接设置框架,而是使用 AutoLayout(约束):

NSLayoutConstraint.activate([
    tabButton.heightAnchor.constraint(equalToConstant: 100),
    tabButton.widthAnchor.constraint(equalToConstant: 100)
])

此外,由于您使用的是堆栈视图,因此设置 xy 值将无效,因为它是唯一的堆栈视图作业,可以在适当的位置布置这些视图。由于您在堆栈视图中使用 spacing,因此设置宽度约束没有意义,因此您应该善于调整此值,并且仅使用高度约束。

NSLayoutConstraint.activate([
    tabButton.heightAnchor.constraint(equalToConstant: 100)
])