web-dev-qa-db-ja.com

プログラムでUIButtonの中心を設定する-SWIFT

UIButtonの内側にUIViewがあります。私のUIButtonには、ストーリーボードで設定した制約があります。ここで、UIButtonの中心をUIViewの中心に設定します。それをプログラムでどのように実行しますか?

12
thedansaps

次のような.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
23
iRiziya

このアプローチでは、Using 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()
8

制約を使用しているため、中心を設定することはできません。そのため、中心を設定するためにも制約を使用する必要があります。

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

自動レイアウト制約の「プログラムで」の意味を知っていると思います。本当にautolayoutを使用している場合は、ボタンのプロパティをsetTranslatesAutoresizingMaskIntoConstraintsをfalseに設定している必要があります。

1
Loxx

私は

yourButton.setCenter(self.view.center);

ただし、プログラムでビューのフレームを設定すると、レイアウトの制約が意図したとおりに機能しない場合があることに注意してください。

0
OutOfBounds

これは2つの方法で実行できます。

  • _myButton.center = view.center //view is your parentView_

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

0
Ashish Gupta