我很难解决这个问题。我提供了一个简单的示例,其中设置了包装设备的约束。但是,视图框架不会根据不同的设备调整大小。
iPhone XR->了解框架与holderView的区别
Iphone 8->框架的尺寸与holderView相同
理想情况下,支架的高度和宽度应随不同的设备而变化,但这并没有发生。
答案 0 :(得分:0)
您的布局看起来不错。 如果他们在模拟器中外观很好,那么 很好。
我怀疑您在正确设置布局之前正在打印框架。
尝试将调试打印语句从viewDidLayoutSubviews
移动到viewDidAppear
或viewDidLoad
。
另外,如果要包装整个设备,则需要在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)
。但是它最终被设定了。由于您使用的是故事板,因此我认为初始帧大小设置为画布帧大小。