Swift3 中心 UIbutton

Posted

技术标签:

【中文标题】Swift3 中心 UIbutton【英文标题】:Swift3 center UIbutton 【发布时间】:2016-09-22 10:45:50 【问题描述】:

好的,我在 .swift 故事板中添加了一个按钮,然后我将以下代码添加到我的 ViewController.swift 中

 @IBOutlet weak var HelloButton: UIButton!

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    HelloButton.frame.origin.x = view.frame.size.width / 2




但是,当我在 iPhone 5s 上对其进行测试时,它会将其移动到屏幕右侧并且不会使其居中。我不确定我需要做什么才能使按钮居中。

是的,这是我的第一个 helloWorld 应用程序,可能超出了我的想象,但我了解 Web 编程,并且我知道要使其自动居中,我需要设置屏幕视图总宽度和按钮宽度。然后我需要对按钮说将屏幕视图宽度除以 2。

例如在 CSS 中我们这样做

#buttonmargin:0 auto;

但这不是 html 或 CSS。它是 SWIFT3

【问题讨论】:

如果您使用的是故事板,那么您应该在界面生成器中添加约束;水平居中和垂直居中。如果您使用自动布局,则无法修改框架。 尝试移动到 viewWillAppear 或者可能更好,viewWillLayoutSubviews。在 viewDidLoad 期间,帧并不总是设置和正确的。 【参考方案1】:

试试这个:

    HelloButton.center.x = view.frame.width/2

您的不正确,因为origin.x 是按钮视图的第一个点(左上角),而不是视图的中心,您可以将其背景颜色更改为其他颜色以查看它

另外,变量名应该是小写,后跟代码约定

【讨论】:

这对我有用,并实现了我正在寻找的外观我将此代码与@Wilson Balderrama 下面的代码结合起来这样,屏幕旋转的方式无关紧要,它将居中中间。我试图将这段代码直接放入 viewDidLoad 区域,虽然它可以工作,但当屏幕旋转时它并没有自动居中。之所以打勾,是因为它回答了我提出的直接问题,但是要获得更详细的答案,需要将 Tj3n 和 Wilson 的两个人的答案结合起来。 如果您使用自动布局方式,它将在您旋转后使用新布局更新您的视图:D 这确实比编程方式更好,这种方式需要您再次调用您的 UI 位置,一个提示是,如果您将此代码为viewDidLayOutSubView 而不是viewDidLoad 它可能会自动为您更新【参考方案2】:

您应该使用 Autolayout 来完成您想要的操作,您的操作方式类似于 Main.storyboard 内的 ViewController 中的以下内容:(control + 鼠标左键 -> 向上拖动蓝线,然后松开控制鼠标左键,你会看到弹出窗口

在弹出窗口中选择选项:

在容器中水平居中 在容器中垂直居中

但如果你想以编程方式进行,请在 viewWillLayoutSubviews 方法中进行:

class ViewController: UIViewController 

  @IBOutlet weak var button: UIButton!

  override func viewWillLayoutSubviews() 
    super. viewWillLayoutSubviews()

    button.center = view.center
  


【讨论】:

感谢您提供覆盖函数 - 一直在阅读“来自 Apple 的 iBook 商店的 Swift 编程语言 2.3,除非我找错地方了,否则这本书没有提到。跨度> 你应该总是调用super的方法,否则类父提供的功能将不会被执行。【参考方案3】:

在您的项目中启用了自动布局?如果启用自动布局,则在 viewdidLoad: 中更改 UI 可能不会给出适当的结果。使用 -viewWillLayoutSubviews 方法来做 UI 任务,你想让你的按钮居中

myButton.center = self.view.center 

希望它会奏效。

【讨论】:

【参考方案4】:

将代码添加到viewDidAppear,这样实际视图就会显示出来。另外,如果你想居中,你应该使用button.center.x 而不是button.frame.origin.x

【讨论】:

以上是关于Swift3 中心 UIbutton的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 - 带有填充的 UICollectionView 中心单元

Swift3 中的 UIView 动画

表格视图部分 Swift3 的页脚中的按钮

将 SKLabelNode 设置为 SKSpriteNode Swift 的中心

iOS Swift 3:UICollectionView 水平中心和更大的单元格

Swift 3 - 自定义 UIButton 半径删除约束?