【问题标题】:How to set the frame of dynamically created button in Swift 3.0如何在 Swift 3.0 中设置动态创建按钮的框架
【发布时间】:2019-03-03 12:28:58
【问题描述】:

我需要在我的 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, width: 50, height: 50) - 它的 x 和 y 动态设置,以便它始终位于底角。 我附上了屏幕截图,这就是它的外观。

请同样指导。

【问题讨论】:

  • 对于其他视图,您是否使用自动布局?如果是,你也应该将它用于按钮,如果不是,你应该对所有视图使用自动布局。

标签: ios swift dynamic uibutton


【解决方案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),
])

【讨论】:

  • 这条线对我有用...button.frame = CGRect(x: UIScreen.main.bounds.size.width - 70 , y: UIScreen.main.bounds.size.height - 70 ,宽度:50,高度:50)
【解决方案2】:

在故事板中,

控制+点击按钮。

然后拖到底部点击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
    }
  }
} 

【讨论】:

  • 按钮在运行时创建,在 viewDidLoad() 中
猜你喜欢
  • 2017-09-11
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多