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 中心单元
将 SKLabelNode 设置为 SKSpriteNode Swift 的中心