如何在Swift中居中文本?

时间:2017-04-02 11:23:46

标签: ios swift3 swift-playground

在Swift游乐场中,如何将UILabel置于UIViewController内?

当我使用title.center = CGPoint(x: vc.view.frame.width / 2, y: 20)时,文字会从屏幕上消失。

这是问题

problem

如果有帮助,这是我的代码。

import UIKit
import PlaygroundSupport


// Set up ViewController and other things
var vc = UIViewController()
vc.view.frame.size.height = 75
vc.view.backgroundColor = .white

let title = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 50))
title.textAlignment = .center
title.center = vc.view.center
title.text = "Which code is correct?"
vc.view.addSubview(title)

PlaygroundPage.current.liveView = vc

2 个答案:

答案 0 :(得分:1)

swift playgrounds的特殊问题是,只有在视图加载/显示在屏幕上后才能正确更新视图控制器的实际帧。这意味着在用于设置实时视图的行之后放置用于居中标签的行应该有帮助:

PlaygroundPage.current.liveView = vc
title.center = vc.view.center
vc.view.addSubview(title)

答案 1 :(得分:0)

如果我们在谈论层次结构中的顶视图(即视图控制器的视图),那么这一行应该足够了:

title.center = vc.view.center

否则,如果你想在任何视图控制器视图的子视图中居中你的视图/标签/按钮/任何内容 - 下一个解决方案是通用的:

title.center = CGPoint(x: parentView.bounds.size.width / 2, y: parentView.bounds.size.height / 2)

如果您想仅水平或垂直居中 - 相应修改yx功能CGPoint(x:y:)参数:

// Center horizontally but with vertical offset of 20 points
title.center = CGPoint(x: parentView.bounds.size.width / 2, y: 20 - title.bounds.size.height / 2)