在 Swift 中以编程方式使按钮居中

Centering buttons programatically in Swift

我正在尝试以编程方式将 Google 登录和注销按钮居中。为了让他们俩都在第三节。我在情节提要中创建了 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)

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

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

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

谢谢。

使用auto-layout代替设置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)
])