如何通过swift 3制作自动调整大小按钮,在不同的Iphone之间工作

时间:2017-02-24 14:05:52

标签: ios swift

我会在我正在努力的应用程序上发布我的代码的一部分,这个概念与众不同,但相机会话的设计与instagram应用程序非常相似。我也使用PageMenu可可豆荚,这非常好并且易​​于通过代码实现。

override func viewDidLoad() {
    super.viewDidLoad()

    pageMenu?.delegate = self
    photoControllerBG.frame = CGRect(x: 0, y : self.view.frame.minY, width: self.view.frame.width, height: self.view.frame.height )

    let cameraButton = UIButton(frame: CGRect(x: self.view.frame.midX -  , y: photoControllerBG.frame.minY + (self.view.frame.maxY/20*1), width: 130, height: 130))
    cameraButton.addTarget(self, action: #selector(cameraButtonPressed(button:)), for: .touchUpInside)
    cameraButton.setImage(#imageLiteral(resourceName: "Camera Button.png"), for: UIControlState.normal)
    self.view.addSubview(cameraButton)
}

目前,iPhone 7 Plus上的按钮将按照我想要的方式显示,以ViewController为中心,并且相机按钮的图像具有相同的宽度和高度,因此它保持完美的圆形。当我用iPhone SE或iPhone 6切换模拟器时,问题出现了,其中按钮将变得太大而不是居中。你们能帮我找一个数学公式,它可以用来解决这个大而小的问题吗?

2 个答案:

答案 0 :(得分:2)

您的问题意味着在代码中执行以下操作(swift)。除非你在swift中创建按钮,否则我根本不会这样做。因此,如果您在故事板中创建了一个按钮,则可以按如下方式对其进行适当缩放: -

我会在故事板中使用比例宽度约束和宽高比约束来实现这一点。

可能不会立即知道如何做到这一点,所以我附上了一个图片之旅。

  1. 将您的按钮添加到视图控制器。图像显示了最终约束条件。
  2. enter image description here

    1. 在按钮及其超级视图
    2. 之间添加等宽度约束

      enter image description here

      1. 按钮的宽度与其超级视图的宽度相等!我的按钮宽100像素,超视距宽375像素。因此,让我们计算一下该比率,以帮助我们计算比例宽度。
      2. enter image description here

        1. 使用上面的比例宽度作为乘数来编辑等宽度约束。
        2. enter image description here

          1. 为按钮添加宽高比
          2. enter image description here

            1. 添加任何剩余约束(在我的情况下,我将按钮水平和垂直居中)

            2. 您对按钮的约束应如下所示:

            3. enter image description here

答案 1 :(得分:0)

    let label = UILabel()
    label.text = "title"
    label.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(label)

    let button = UIButton(type: .system)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.setImage(#imageLiteral(resourceName: "image"), for: .normal)
    view.addSubview(button)

    NSLayoutConstraint.activate([
        label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        label.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor, constant: 16)
    ])

    NSLayoutConstraint.activate([
        button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        button.topAnchor.constraint(equalTo: label.bottomAnchor),
        button.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.3), //change your multiplier
        button.heightAnchor.constraint(equalTo: button.widthAnchor)
        ])