Как изменить ограничения в зависимости от высоты устройства (xcode)

#ios #swift #xcode

#iOS #swift #xcode

Вопрос:

Я хотел бы сделать кнопку ближе к нижней части экрана. Если для устройства ex. пользователя — iPhone 5S, 10 баллов, а для iPhone 11 — 20 баллов и т. Д. Я не мог найти, как сделать это так

 constraint = height / constant
 

таким образом, чем выше устройство, тем выше будет кнопка. Как я могу добиться этого программно или из пользовательского интерфейса Xcode?

Ответ №1:

Может быть, вы можете получить высоту окон ваших устройств и умножить ее на коэффициент?

 var button : UIButton = {
    let b = UIButton()
    b.translatesAutoresizingMaskIntoConstraints = false
    b.backgroundColor = .red
    return b
}()

override func viewDidLoad() {
    super.viewDidLoad()

    let screenSize = UIScreen.main.bounds
    let height = screenSize.height
    let ratio:CGFloat = 0.05 // you can change this
    let bottomConstraint = height*ratio
    print(bottomConstraint) // this would print 44.80 on the iPhone 11 and 33.35 on the iPhone 8

    self.view.addSubview(button)
    button.heightAnchor.constraint(equalToConstant: 50).isActive = true
    button.widthAnchor.constraint(equalToConstant: 200).isActive = true
    button.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
    // then you applied the variable constraint
    button.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor, constant: -bottomConstraint).isActive = true
}
 

IPHONE8

IPHONE11

Ответ №2:

В вашем viewDidLoad , получите ссылку на представление для настройки как так:

 class ViewController: UIViewController {
  var targetView: UIView! // or @IBOutlet if you created it from the Interface Builder (IB)
  private let ratio: CGFloat = 0.05

  override func viewDidLoad() {
    super.viewDidLoad()
    // The following line enables you to programmatically set constraint using AutoLayout
    targetView.translatesAutoresizingMaskIntoConstraints = false

    // Get the height of the screen
    let height = UIScreen.main.bounds.height

    targetView.bottomAnchor.constraint(
        equalTo: view.safeAreaLayoutGuide.bottomAnchor,
        constant: -height * ratio
    ).isActive = true
    // Set the other necessary constraints
  }