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

Posted

技术标签:

【中文标题】在 Swift 中以编程方式居中按钮【英文标题】:Centering buttons programatically in Swift 【发布时间】:2020-12-31 05:48:12 【问题描述】:

我正在尝试以编程方式将 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 的吗 使用自动布局代替设置矩形 【参考方案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)
])


【讨论】:

以上是关于在 Swift 中以编程方式居中按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中以编程方式旋转一组按钮?

如何在 Swift 4 中以编程方式将 IBAction 添加到按钮?

如何在 Swift 5 中以编程方式从右上角添加垂直按钮列表

当 BLE 在 Swift 中以编程方式连接时,蓝牙设备设置中缺少信息按钮

如何在 Swift 中以编程方式更改自定义 UITableViewCell 中按钮的背景颜色?

如何在 Swift 中以编程方式将 UILabel 对象居中?