【问题标题】:Centering buttons programatically in Swift在 Swift 中以编程方式居中按钮
【发布时间】:2025-12-04 05:55:01
【问题描述】:

我正在尝试以编程方式将 Google 登录和退出按钮居中。为了把他们俩都放在第三节。我在 Storyboard 中创建了 2 个视图,我想将按钮放在它们的中心。

        GIDSignIn.sharedInstance()?.presentingViewController = self
    GIDSignIn.sharedInstance().signIn()
    let gSignIn = GIDSignInButton(frame: CGRect(x: 0, y: 0, width: loginView.frame.size.width, height: loginView.frame.size.height))
    loginView.addSubview(gSignIn)
    gSignIn.center = loginView.center
    
    
    let gSignOut = UIButton(frame: CGRect(x: 0, y: 0, width: signOutView.frame.size.width, height: signOutView.frame.size.height))
    gSignOut.backgroundColor = UIColor.white.withAlphaComponent(0)
    gSignOut.setTitle("Sign Out", for: .normal)
    gSignOut.setTitleColor(UIColor.red, for: .normal)
    gSignOut.addTarget(self, action: #selector(self.signOut(_:)), for: .touchUpInside)
    gSignOut.center = signOutView.center
    self.signOutView.addSubview(gSignOut)

如您所见,我也在尝试根据视图大小调整按钮大小,这有助于我根据设备大小调整按钮大小。

这是我故事板的后半部分。

这是我运行代码时的模拟器屏幕。

谢谢。

【问题讨论】:

  • 您能解释一下您是如何定义 loginView 和 signOutView 的吗
  • 使用自动布局代替设置矩形

标签: swift button layout google-signin centering


【解决方案1】:

使用自动布局代替设置frame.center,会更灵活。

自动布局类似于下面的代码。


GIDSignIn.sharedInstance()?.presentingViewController = self
GIDSignIn.sharedInstance().signIn()

let gSignIn = GIDSignInButton(frame: CGRect(x: 0, y: 0, width: loginView.frame.size.width, height: loginView.frame.size.height))
gSignIn.translatesautoresizingmaskintoconstraints = false
loginView.addSubview(gSignIn)

NSLayoutConstraint.activate([
    gSignIn.leftAnchor.constraint(equalTo: loginView.leftAnchor),
    gSignIn.rightAnchor.constraint(equalTo: loginView.rightAnchor),
    gSignIn.topAnchor.constraint(equalTo: loginView.topAnchor),
    gSignIn.bottomAnchor.constraint(equalTo: loginView.bottomAnchor)
])


【讨论】: