如何在Swift 3.0中设置动态创建按钮的框架

时间:2018-09-27 14:40:07

标签: ios swift dynamic uibutton

我需要在iPhone应用程序的下角放置一个圆形按钮。到目前为止,对于iPhone 5,下面的代码不错,但对于其他iPhone,按钮位于中间。

let button = UIButton(type: .custom)
        button.frame = CGRect(x: 260, y: 500, width: 50, height: 50)
        button.layer.cornerRadius = 0.5 * button.bounds.size.width
        button.clipsToBounds = true
        button.setImage(UIImage(named:"dummy.jpg"), for: UIControlState.normal);
        button.addTarget(self, action: #selector(bankButtonPressed), for: .touchUpInside)
        view.addSubview(button)

那么,如何动态设置按钮的知名度,使其适合所有型号的iPhone。 我想要button.frame = CGRect(x:260,y:500,宽度:50,高度:50)-它的x和y是动态设置的,因此始终位于底角。 我已经附上了屏幕截图,这就是它的样子。

enter image description here

请指导相同。

2 个答案:

答案 0 :(得分:1)

在情节提要中,

  

控制+单击按钮。

然后拖动到底部,然后单击 Bottom to safeArea

更新,因为您是在ViewDidLoad中创建的,所以可以使用此扩展名以编程方式向底部区域和其他区域添加约束

extension UIButton {

  var safeTopAnchor: NSLayoutYAxisAnchor {
    if #available(iOS 11.0, *) {
      return self.safeAreaLayoutGuide.topAnchor
    } else {
      return self.topAnchor
    }
  }

  var safeLeftAnchor: NSLayoutXAxisAnchor {
    if #available(iOS 11.0, *){
      return self.safeAreaLayoutGuide.leftAnchor
    }else {
      return self.leftAnchor
    }
  }

  var safeRightAnchor: NSLayoutXAxisAnchor {
    if #available(iOS 11.0, *){
      return self.safeAreaLayoutGuide.rightAnchor
    }else {
      return self.rightAnchor
    }
  }

  var safeBottomAnchor: NSLayoutYAxisAnchor {
    if #available(iOS 11.0, *) {
      return self.safeAreaLayoutGuide.bottomAnchor
    } else {
      return self.bottomAnchor
    }
  }
} 

答案 1 :(得分:1)

替换此

button.frame = CGRect(x: 260, y: 500, width: 50, height: 50)

使用

button.frame = CGRect(x:  UIScreen.main.bounds.size.width - 70 , y:  UIScreen.main.bounds.size.height - 70 , width: 50, height: 50)

或使用自动布局

button.translatesAutoresizingMaskIntoConstraints = false

NSLayoutConstraint.activate([

    button.trailingAnchor.constraint(equalTo: view.trailingAnchor,constant:-20),

    button.bottomAnchor.constraint(equalTo: view.bottomAnchor,constant:-20),
])