【问题标题】:Set the center of a UIButton programmatically - SWIFT以编程方式设置 UIButton 的中心 - SWIFT
【发布时间】:2015-11-20 01:15:29
【问题描述】:

我在UIView 中有一个UIButton,我的UIButton 有我在情节提要中设置的约束。现在,我想将UIButton 的中心设置在UIView 的中心。我将如何以编程方式做到这一点?

【问题讨论】:

    标签: ios swift uiview uibutton


    【解决方案1】:

    试试.center 之类的属性

    myButton.center = self.view.center
    

    如果需要,您还可以指定x 和y。

    myButton.center.x = self.view.center.x // for horizontal
    myButton.center.y = self.view.center.y // for vertical
    

    【讨论】:

      【解决方案2】:

      我应该是

      yourButton.setCenter(self.view.center);
      

      但请记住,如果您以编程方式设置视图的框架,您的布局约束可能无法按预期工作。

      【讨论】:

        【解决方案3】:

        由于您使用了约束,您将无法设置中心,因此您还需要使用约束来设置中心:

            let centerYCon = NSLayoutConstraint(item: labelMessage,
                attribute: .CenterY,
                relatedBy: .Equal,
                toItem: contentView,
                attribute: .CenterY,
                multiplier: 1.0,
                constant: 0.0);
            contentView.addConstraint(centerYCon);
        
        
            let centerXCon = NSLayoutConstraint(item: labelMessage,
                attribute: .CenterX,
                relatedBy: .Equal,
                toItem: contentView,
                attribute: .CenterX,
                multiplier: 1.0,
                constant: 0.0);
            contentView.addConstraint(centerXCon);
        

        我假设您知道“以编程方式”对自动布局约束意味着什么。如果您真的使用自动布局,那么您必须将按钮的属性设置为 setTranslatesAutoresizingMaskIntoConstraints 为 false。

        【讨论】:

        • 谢谢,如何将 setTranslatesAutoresizingMaskIntoConstraints 设置为 false?
        • 然后你这样设置:self.tableView.setTranslatesAutoresizingMaskIntoConstraints(false)
        • '无法在视图上安装约束。约束是否引用了视图子树之外的内容?这是违法的。
        • 但显然将“tableView”更改为您的 ui 元素
        • 嗯,是的,当您要求以编程方式设置视图时,当您可以设置约束的状态下视图不存在时,您会遇到问题。
        【解决方案4】:

        这种方法是使用使用 NSLayoutConstraint,其中 self.cenBut 是按钮的 IBoutlet。

        func setupConstraints() {
            let centerX = NSLayoutConstraint(item: self.cenBut, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
            let centerY = NSLayoutConstraint(item: self.cenBut, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0)
            let height = NSLayoutConstraint(item: self.cenBut, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 22)
            self.cenBut.translatesAutoresizingMaskIntoConstraints = false
            self.view.addConstraints([centerX, centerY, height])
        }
        

        在 viewDidLoad() 中

        self.view.removeConstraints(self.view.constraints)
        self.setupConstraints()
        

        【讨论】:

        • 我也试过了,但它给了我一个错误,无论如何感谢您的帮助!
        【解决方案5】:

        这可以通过两种方式完成:

        • myButton.center = view.center //view is your parentView

        • myButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true myButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-28
          • 2016-03-30
          • 1970-01-01
          • 1970-01-01
          • 2016-09-28
          • 2019-05-10
          相关资源
          最近更新 更多