简体   繁体   中英

Set the center of a UIButton programmatically - SWIFT

I have a UIButton inside a UIView , my UIButton has constraints which I set in storyboard. Now, I want to set the center of the UIButton at the center of the UIView . How will I do that programmatically?

Try .center property like

myButton.center = self.view.center

You can also specify x and y If you need.

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

This approach is using Using NSLayoutConstraint where self.cenBut is the IBoutlet for your button.

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])
}

In viewDidLoad()

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

since you are using constraints, you won't be able to set the center so you need to use constraints to set the center as well:

    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);

I'm assuming that you know what "programmatically" means with autolayout constraints. If you are truly using autolayout then you must have set the properties of your button to setTranslatesAutoresizingMaskIntoConstraints to false.

This can be done in 2 ways:

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

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

I should be

yourButton.setCenter(self.view.center);

But keep in mind that if you programmatically set the frame of a view, your layout constraints might not work as intended.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM