程序化添加视图的问题

时间:2017-02-27 14:29:34

标签: ios swift views programmatically-created

嗨,我是programmaticaly添加一些像这样的视图

        let xPos = (self.view.frame.size.width - 200)/2
        self.headerLabel = UILabel(frame: CGRect(x: xPos, y: 50.0, width: 200.0, height: 100.0))
        self.shopButton = UIButton(frame: CGRect(x: xPos, y: 150.0, width: 200.0, height: 40.0))
        self.createButton = UIButton(frame: CGRect(x: xPos, y: 230.0, width: 200.0, height: 40.0))
        self.orLabel = UILabel(frame: CGRect(x: xPos, y: 200.0, width: 200.0, height: 20.0))

问题是当我将设备旋转到横向模式时,反之亦然,我的视图与左侧对齐。我该如何预防?

3 个答案:

答案 0 :(得分:0)

使用NSLayoutConstaint

将视图中的约束添加到其超级视图中

例如

let horizontalConstraint = NSLayoutConstraint.init(item: view, attribute: .centerX, relatedBy: .equal, toItem: view.superview, attribute: .centerX, multiplier: 1, constant: 1)
        horizontalConstraint.isActive = true

        let verticalConstraint = NSLayoutConstraint.init(item: view, attribute: .centerY, relatedBy: .equal, toItem: view.superview, attribute: .centerY, multiplier: 1, constant: 1)
        verticalConstraint.isActive = true

答案 1 :(得分:0)

如果可以,我会在界面构建器中添加这些元素。然后,您可以手动设置约束,这比以编程方式添加约束要容易得多。您看到此行为的原因是因为您的元素没有约束,因此在旋转屏幕时它们不会更改方向。

查看以下链接: https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/WorkingwithConstraintsinInterfaceBuidler.html

https://www.raywenderlich.com/115440/auto-layout-tutorial-in-ios-9-part-1-getting-started-2

答案 2 :(得分:0)

如果您根本没有使用故事板,我建议您使用Neon框架。 它可以帮助您设计整个视图 - 还可以在程序上设置按钮,图像......

请参阅以下Github回购: https://github.com/mamaral/Neon