如何在 Swift 中将 UIButton 居中?

Posted

技术标签:

【中文标题】如何在 Swift 中将 UIButton 居中?【英文标题】:How to center UIButton in Swift? 【发布时间】:2015-09-23 14:00:24 【问题描述】:

我的UIButton 有此代码。我应该在我的CGRectMake 中更改什么以将我的UIButton 设置在所有屏幕尺寸的屏幕中心?

let loginBtn = UIButton(frame: CGRectMake(60, 360, 240, 40))
loginBtn.layer.borderColor = UIColor.whiteColor().CGColor
loginBtn.layer.borderWidth = 2
loginBtn.titleLabel!.font = UIFont.systemFontOfSize(24)
loginBtn.tintColor = UIColor.whiteColor()
loginBtn.setTitle("Login", forState: UIControlState.Normal)
self.view.addSubview(loginBtn)

【问题讨论】:

我想用代码而不是自动布局来了解它 您可以在代码中进行自动布局。如果您不使用/学习自动布局,那么您将落后。查找有关自动布局的教程并使用它。 :-) 只需将中心设置为视图的中心 Centering a label in a UIView的可能重复 【参考方案1】:

对于您的视图的 uibutton 中心,将您的 cgrectmake 更新为 bleow..

CGRectMake((self.view.frame.size.width - 240) / 2, (self.view.frame.size.height - 40) / 2,240,40)  

您可以在代码后添加一行

loginBtn.center = self.view.center

对于注册按钮:

signup.frame = loginBtn.bounds
signup.center = CGPointMake(loginBtn.center.x, loginBtn.center.y + loginBtn.frame.size.height + 10)

【讨论】:

谢谢,我尝试在我的代码之后添加那个简单的代码,它起作用了:) 但我现在必须按按钮,一个用于登录,一个用于注册,并且该代码使其位于中心,那么如何在登录按钮下方制作注册按钮? @mrunalthanki 如果我想将按钮设置为右侧怎么办?【参考方案2】:

将您的UIButtoncenter 设置在它所在的view 的中心。

loginBtn.center = view.center

【讨论】:

frame 还有一个属性叫 midX 和 midY 谢谢@LeoDabus。不知道该属性。 超级视图可能还有一个center属性loginBtn.center = view.center 您的代码也很好用,但我现在必须按按钮,一个用于登录,一个用于注册,并且该代码位于中心,那么如何在登录按钮下方制作注册按钮?谢谢 @HusseinRedaAlBehary 提出一个新问题。您应该考虑使用自动布局。【参考方案3】:

您需要在self.view.addSubview(loginBtn)之前添加以下行。

loginBtn.center = self.view.center

【讨论】:

但我现在必须按按钮,一个用于登录,一个用于注册,并且该代码使其位于中心,那么如何在登录按钮下方制作注册按钮?【参考方案4】:

这将使按钮在整个屏幕上居中,而不仅仅是它所在的视图:

let verticalCenter: CGFloat = UIScreen.mainScreen().bounds.size.height / 2.0
let horizontalCenter: CGFloat = UIScreen.mainScreen().bounds.size.width / 2.0

loginBtn.center = CGPoint(x: horizontalCenter, y: verticalCenter)

编辑:

正如@LeoDabus 指出的,这可以通过使用CGRect 上的midXmidY 属性来压缩:

let verticalCenter: CGFloat = UIScreen.mainScreen().bounds.midY
let horizontalCenter: CGFloat = UIScreen.mainScreen().bounds.midX

【讨论】:

bounds 有一个名为 midX 和 midY 的属性。 你能链接一个参考吗?我在这里找不到属性:developer.apple.com/library/prerelease/ios/documentation/… nshipster.com/cggeometry 抱歉,我在 Apple 的网站上找不到这些扩展 CGRect 扩展 CGRect var minX: CGFloat get var minY: CGFloat get var midX: CGFloat get var midY: CGFloat get var maxX: CGFloat get var maxY: CGFloat 获取 var 宽度:CGFloat var 高度:CGFloat 【参考方案5】:

对于 Swift 4

@IBOutlet weak var btStart: UIButton!

在任何屏幕(任何设备)的中间

btStart.center = self.view.center

btStart.center.x = self.view.center.x
btStart.center.y = self.view.center.y

在中心 x 处,距离顶部 25%

btStart.center.x = self.view.center.x
btStart.center.y = self.view.center.y / 2

【讨论】:

【参考方案6】:

我发现这对我来说是最好的解决方案..

斯威夫特 4

myButton.center.x = self.view.frame.midX 
myButton.center.y = self.view.frame.midY

我发现如果我需要经常将事物居中,我通常会使用通用解决方案。

extension UIViewController 
    func centerComponent(_ component: AnyObject) 
        let customView = component as! UIView
        customView.center.x = self.view.frame.midX
        customView.center.y = self.view.frame.midY
    

然后您可以从函数内的任何 UIViewcontroller 调用它,如下所示:

centerComponent(myButton)

【讨论】:

以上是关于如何在 Swift 中将 UIButton 居中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 3 中将 UIButton 添加到我的 UITableViewCell 中?

如何在 Swift 中将文本居中?

如何在 Swift 中将 UITextField 文本居中

在 Swift 中将多个 UIButton 添加到多个 UIView

如何使用 Swift 在 UIView 中将圆形进度条居中?

以编程方式将 UIButton 居中到 Superview 类(Swift 3)