在 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 4 中以编程方式将 IBAction 添加到按钮?
如何在 Swift 5 中以编程方式从右上角添加垂直按钮列表
当 BLE 在 Swift 中以编程方式连接时,蓝牙设备设置中缺少信息按钮