我在Storyboard中定义了一个标签,我正试图以编程方式改变其位置。有一些关于SO的现有问题似乎已经解决了这个问题,但没有一个解决方案似乎有效(即,标签不动)。我已经删除了标签上所有现有的限制,但无济于事。我试过:
class LandingViewController: UIViewController {
@IBOutlet weak var titleLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
titleLabel.frame = CGRectMake(100, 25, titleLabel.frame.size.width, titleLabel.frame.size.height)
}
我也试过
titleLabel.center = CGPointMake(120, 150)
代替titleLabel.frame
我错过了什么吗?
当使用AutoLayout时,在带有约束的故事板中实例化的视图将其translatesAutoresizingMaskIntoConstraints
属性设置为false
,与通过编程实例化的视图相反。这是因为接口构建器期望约束完全指定视图的布局。
要手动修改frame/bounds/center,在代码中将此属性设置为true
。这将使视图的布局行为方式类似于AutoLayout之前的工作方式,所以要注意,如果你在实际上希望使用约束进行布局时指定了这个属性,那么你在视图上指定的任何约束都可能发生冲突或表现出意外。
我建议你首先考虑是否你真正想做的是指定你的标签的位置通过自动布局约束。现在,你很少像上面那样手动指定一个位置。
是否根据屏幕大小将标签居中?如果是,请尝试以下操作(注意UIlabel是通过编程方式创建的)
var tempLabel:UILabel
override func viewDidLoad() {
super.viewDidLoad()
//gets screen frame size
var fm: CGRect = UIScreen.mainScreen().bounds
//creates a temp UILabel
tempLabel = UILabel(frame: CGRectMake(0, fm.frame.size.height, fm.size.width, fm.size.height))
//aligns the UIlabel to center
tempLabel.textAlignment = NSTextAlignment.Center
//adding UIlabel to view
view.addSubview(tempLabel)
}