【问题标题】:Constraining Text Field to Button in Swift在 Swift 中将文本字段约束为按钮
【发布时间】:2022-01-05 01:39:01
【问题描述】:

我在情节提要中创建了一个按钮,但有一个需要在代码中实现的自定义 UITextField,我试图将文本字段放置在按钮上方 20 像素处,但我没有得到想要的结果出于某种原因。我是否遗漏了什么,或者这不是您实现它的方式?这是我的实现和输出:

@IBOutlet weak var buyPointsButton: UIButton!

lazy var cardTextField: STPPaymentCardTextField = {
    let cardTextField = STPPaymentCardTextField()
    return cardTextField
}()

viewDidLoad

self.view.addSubview(cardTextField)
cardTextField.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    NSLayoutConstraint(item: cardTextField, attribute: .bottom, relatedBy: .equal, toItem: buyPointsButton, attribute: .top, multiplier: 1, constant: 70),
    NSLayoutConstraint(item: cardTextField, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: buyPointsButton.frame.width),
    NSLayoutConstraint(item: cardTextField, attribute: .centerY, relatedBy: .equal, toItem: self.view, attribute: .centerY, multiplier: 1, constant: 0),
    NSLayoutConstraint(item: cardTextField, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 28)
])

【问题讨论】:

    标签: swift uibutton autolayout uitextfield nslayoutconstraint


    【解决方案1】:

    主要问题是您将文本字段的 .centerY 设置为视图的 .centerY 并且您将文本字段的底部限制为按钮顶部...

    如果您使用更“现代”的语法,您会发现使用约束要容易得多,并且包括 cmets 告诉自己约束是什么——或者至少应该是——做什么。

    例如:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        self.view.addSubview(cardTextField)
        cardTextField.translatesAutoresizingMaskIntoConstraints = false
        
        NSLayoutConstraint.activate([
            
            // Bottom of text field 20-points above Top of button
            cardTextField.bottomAnchor.constraint(equalTo: buyPointsButton.topAnchor, constant: -20.0),
            
            // text field Width equal to button Width
            cardTextField.widthAnchor.constraint(equalTo: buyPointsButton.widthAnchor),
            
            // text field centered horizontally to button
            cardTextField.centerXAnchor.constraint(equalTo: buyPointsButton.centerXAnchor),
            
            // text field Height equal to 28
            cardTextField.heightAnchor.constraint(equalToConstant: 28.0),
            
        ])
    }
    

    【讨论】:

      猜你喜欢
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 2018-06-10
      • 2018-07-18
      • 2022-11-09
      相关资源
      最近更新 更多