视图无法自动调整大小以满足约束

时间:2019-08-24 07:40:47

标签: swift xcode constraints

我很难解决这个问题。我提供了一个简单的示例,其中设置了包装设备的约束。但是,视图框架不会根据不同的设备调整大小。

iPhone XR->了解框架与holderView的区别

https://imgur.com/ZyoCNGQ

Iphone 8->框架的尺寸与holderView相同

https://imgur.com/S6xnzcZ

理想情况下,支架的高度和宽度应随不同的设备而变化,但这并没有发生。

1 个答案:

答案 0 :(得分:0)

您的布局看起来不错。 如果他们在模拟器中外观很好,那么 很好。

我怀疑您在正确设置布局之前正在打印框架。 尝试将调试打印语句从viewDidLayoutSubviews移动到viewDidAppearviewDidLoad。 另外,如果要包装整个设备,则需要在superView而不是safeAreaLayoutGuide周围设置约束。

尽管我已通过编程方式完成了此操作,但以下基本上是您拥有的布局:

class ViewController: UIViewController {
  var holderView: UIView!

  override func viewDidLoad() {
    super.viewDidLoad()
    holderView = UIView()
    holderView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(holderView)
    NSLayoutConstraint.activate([
      holderView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
      holderView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
      holderView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
      holderView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
    ])
    holderView.backgroundColor = .orange

    print(holderView.frame)
    print(view.frame)
  }

  override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    print(holderView.frame)
    print(view.frame)
  }
}

在iPhone XR中,

(0.0, 0.0, 0.0, 0.0)
(0.0, 0.0, 414.0, 896.0)
(0.0, 44.0, 414.0, 818.0)
(0.0, 0.0, 414.0, 896.0)

被打印。您可以看到holderView的框架是(0,0,0,0)。但是它最终被设定了。由于您使用的是故事板,因此我认为初始帧大小设置为画布帧大小。